2015-09-24 5 views
5

दोनों मैं पाइथन में एक कथन कथन को संकलित करने की कोशिश कर रहा हूं, जहां यह दो चरों को जांचता है यह देखने के लिए कि वे < = .05 हैं। अब यदि दोनों चर सही हैं, तो मैं सिर्फ कोड को पास/जारी रखना चाहता हूं, लेकिन यदि केवल एक चर सही है, तो मैं कोड कुछ करना चाहता हूं। उदाहरण के लिए:पायथन सशर्त एक या दूसरा लेकिन

ht1 = 0.04 
ht2 = 0.03 

if (ht1 <= 0.05) or (ht2 <= 0.05): 
    # do something 
else: 
    pass 

मुझे नहीं लगता कि इस उदाहरण तरह से मैं यह चाहेगा के रूप में या की मेरी समझ 1 हालत रिटर्न सच है या दोनों की स्थिति यह सच लौट काम करेंगे है। अगर कोई मुझे सही दिशा में इंगित करने में गधे लगा सकता है, तो उसे बहुत प्रशंसा होगी।

+0

आप, इस तरह XOR आपरेशन कुछ के बारे में सोच सकता है अगर bool ((HT1 <= 0.05)) = bool ((HT2 <= 0.05)): – csharpcoder

उत्तर

8

क्या आप चाहते हैं एक "विशेष-या" है, जो इस मामले में एक 'नहीं-बराबर' या के रूप में व्यक्त किया जा सकता है कहा जाता है 'नहीं है' संबंध:

if (ht <= 0.05) is not (ht2 <= 0.05): 

इस तरह से काम यह है कि if केवल तभी सफल होगा यदि उनमें से एक True है और दूसरा False है। यदि वे True या False दोनों हैं तो यह else ब्लॉक पर जाएगा।

+1

सही है, लेकिन सूक्ष्म। संबंधपरक अभिव्यक्ति एक बूल लौटती है। एक बूल दो सिंगलटन ऑब्जेक्ट्स 'ट्रू' या 'गलत' है। इसलिए, 'नहीं है' एक उचित परीक्षण है। व्यक्तिगत रूप से मैं '! =' पसंद करूंगा। – nigel222

+1

@ nigel222 सहमत हैं कि यह थोड़ा सूक्ष्म है; मैंने केवल इस तथ्य के कारण 'नहीं' का उपयोग किया है कि यह 'बूल' की तुलना है। यह मेरे लिए थोड़ा क्लीनर पढ़ता है, लेकिन यह निश्चित रूप से एक स्वाद की बात है। मेरे दिमाग में, '! =' अन्य '<= 'तुलनाओं के बीच थोड़ा खो जाएगा, भले ही यह एक बहुत ही अलग उद्देश्य की सेवा कर रहा हो (यानी गणितीय लग सकता है भले ही यह एक तार्किक ऑपरेटर हो)। – tzaman

+0

उस स्पष्टीकरण के लिए धन्यवाद। मेरे लिए, '(ht1 <= 0.05) में ब्रैकेट्स! = (एचटी 2 <= 0.05)' '_ =' अलग करें। सहमत हैं, पदार्थ नहीं स्वाद। प्रवाह में स्पष्टता के लिए – nigel222

7

चूंकि संबंध ऑपरेटर हमेशा bool में परिणाम देते हैं, तो यह देखने के लिए जांचें कि वे अलग-अलग मान हैं या नहीं।

if (ht1 <= 0.05) != (ht2 <= 0.05): # Check if only one is true 
    ... 
0

बस ऐसा करने का एक और तरीका:

if max(ht1, ht2) > 0.05 and min(ht1, ht2) <= 0.05: 
3

इस विधि तकनीकी रूप से धीमी है क्योंकि यह तुलना में दो बार की गणना करने के लिए किया है, लेकिन मैं इसे थोड़ा और अधिक पठनीय पाते हैं। आपकी माइलेज भिन्न हो सकती है।

ht1 = 0.04 
ht2 = 0.03 

if (ht1 <= 0.05) and (ht2 <= 0.05): 
    pass 
elif (ht1 <= 0.05) or (ht2 <= 0.05): 
    # do something. 
+0

+1। pythonic। – wim

संबंधित मुद्दे