रिवर्स ऑर्डर में अपने प्रश्नों का उत्तर देने के लिए, True
के साथ स्पष्ट रूप से तुलना करने का कारण यह नहीं है कि पाइथन ने आपके द्वारा अपेक्षित अभिव्यक्ति की व्याख्या नहीं की है। अजगर पार्सर ताकि आप उन्हें एक साथ श्रृंखला और एक समझदार परिणाम प्राप्त कर सकते हैं, इस तरह भाव की तुलना की विशेष हैंडलिंग है:
>>> "a" == "a" == "a"
True
सूचना अजगर, एक आपरेशन के रूप में इस पूरी बात के इलाज के लिए है क्योंकि अगर आप इसे विभाजित दो आपरेशन किसी भी तरह में आप एक ही परिणाम नहीं मिलता है:
>>> ("a" == "a") == "a"
False
>>> "a" == ("a" == "a")
False
ये अलग तरीके से व्यवहार क्योंकि कोष्ठक में हिस्सा पहले का मूल्यांकन किया और True
देता है, लेकिन True != "a"
तो पूरे अभिव्यक्ति गलत देता है।
उपरोक्त अधिकारों से वास्तव में आपके कार्यक्रम पर कोई प्रभाव नहीं होना चाहिए। दुर्भाग्य से, अजगर ==
इसलिए जब आप इन एक साथ श्रृंखला वे ऊपर की तरह एक दृश्य के रूप में व्याख्या कर रहे हैं के रूप में ही तंत्र के माध्यम से in
संभालती है, तो वास्तव में यह अजगर का मूल्यांकन करता है इस प्रकार है:
>> "a" in ["a"] == True
False
>>> ("a" in ["a"]) and ("a" == True)
False
यह निराला और यकीनन जवाबी सहज है, लेकिन दुर्भाग्य से यह कैसे काम करता है।व्यवहार प्राप्त करने के लिए आप चाहते थे आप अलग से पहले भाग का मूल्यांकन करने के अजगर मजबूर करने के लिए कोष्ठक का उपयोग करने की आवश्यकता है: कहा जाता है कि सभी के साथ
>>> ("a" in ["a"]) == True
True
, == True
बेमानी है, क्योंकि के रूप में आप पर शक, अभिव्यक्ति पहले से ही एक बूलियन रिटर्न और if
कथन सिर्फ इसका मूल्यांकन कर सकता है।
अब अपनी दूसरी समस्या पर लौटने के लिए, मुझे विश्वास है कि आप जो करने की कोशिश कर रहे हैं वह इनपुट की एक पंक्ति लेता है और उपयोगकर्ता द्वारा दर्ज किए गए अनुसार, आउटपुट की एक समान रेखा का उत्पादन करता है। यदि इनपुट तार से मेल खाता
answer = ['Yes', 'yes', 'YES']
answer2 = ['No', 'no', 'NO']
ans = raw_input()
if ans in answer:
print "Yes!"
elif ans in answer2:
print "No!"
else:
print "Don't know what that means"
यह पहला परीक्षण: यदि स्ट्रिंग सूची है, जो आप पूरी तरह अपने for
पाश समाप्त करने की सुविधा में है देखने के लिए एक स्ट्रिंग और एक सूची in
ऑपरेटर आवेदन कर सकते हैं answer
में, फिर answer2
के लिए समान है। बेशक, आप एक समान प्रभाव प्राप्त कर सकते हैं, लेकिन इनपुट को लोअरकेस में परिवर्तित करके और इसे लोअरकेस फॉर्म में तुलना करके YeS
जैसे अन्य रूपों का समर्थन भी कर सकते हैं:
if ans.lower() == "yes":
print "Yes!"
# (and so forth)