2012-09-08 9 views
8

के साथ कई स्थितियां मैं अलग-अलग ट्रिगर्स के साथ कई बार कथन को दोबारा लिखने के बिना एक से अधिक शर्त से ट्रिगर करने के लिए एक कथन प्राप्त करने का प्रयास कर रहा हूं। उदाहरण:यदि/elif बयान

if user_input == "look": 
    print description 


if user_input == "look around": 
    print description 

आप उन्हें एक कथन में कैसे दंडित करेंगे?

मैंने 'या' का उपयोग करने का प्रयास किया है और इसने किसी भी कच्चे_इनपुट को बयान ट्रिगर करने के लिए बिल्कुल भी कारण बताया है कि इनपुट में से किसी भी स्थिति से मेल खाता है या नहीं।

if user_input == "look" or "look around": 
    print description 

उत्तर

11

आपको क्या करने की कोशिश कर रहे हैं

if user_input == "look" or user_input == "look around": 
    print description 

एक अन्य विकल्प है यदि आप संभावनाओं के लिए बहुत कुछ है:

if user_input in ("look", "look around"): 
    print description 

जब से तुम 2.7 का उपयोग कर रहे हैं, आप भी लिख सकता है यह इस तरह है (जो 2.7 या 3+ में काम करता है, लेकिन 2.6 या उससे नीचे नहीं):

if user_input in {"look", "look around"}: 
    print description 

जो आपके तत्वों का set बनाता है, जो खोज करने के लिए बहुत तेज़ है (हालांकि यह केवल तभी महत्वपूर्ण है जब आप जिन तत्वों की जांच कर रहे हैं, वे 2 से अधिक बड़े हैं)।


आपके पहले प्रयास हमेशा के माध्यम से जाने का कारण यह है। पायथन में अधिकांश चीजें True (False, None, या खाली तार, सूचियों, डिब्बे, ... के अलावा) का मूल्यांकन करती हैं। or दो चीजें लेता है और उन्हें बूलियन के रूप में मूल्यांकन करता है। तो user_input == "look" or "look around" को (user_input == "look") or "look_around" जैसा माना जाता है; यदि पहला झूठा है, तो ऐसा लगता है कि आपने if "look_around": लिखा था, जो हमेशा से गुजरता है।

+0

धन्यवाद डगल के साथ कुछ लेना देना नहीं है! वास्तव में बेवकूफ सवाल! – Blaine

+0

@ ब्लाइन यह एक समस्या है कि कई नए प्रोग्रामर पायथन में भाग लेते हैं; यह _looks_ जैसा कि आप ऐसा करना चाहते हैं जो आप करना चाहते हैं, लेकिन, ठीक है, ऐसा नहीं है। :) उम्मीद है कि यह मेरी व्याख्या क्यों करता है कि यह इस तरह क्यों काम करता है समझ में आता है। – Dougal

+0

अहह जो इसे समझाते हैं। मेरी तर्क सारणी सीख रही थी इसलिए मैं तुम्हें प्राप्त करता हूं! :) – Blaine

2

आप रेगुलर एक्सप्रेशन का उपयोग तार मिलान करने के लिए अगर वे वैकल्पिक वर्गों के साथ एक पैटर्न का पालन कर सकता है या आप एक सरणी देखने कर सकता है:

if user_input in ["look", "look around"]: 
    print description 

बूलियन ऑपरेटर or केवल बूलियन मूल्यों के साथ काम करता है, यह मूल्यांकन करता है अभिव्यक्ति दोनों तरफ और रिटर्न True यदि अभिव्यक्तियों में से कोई एक True का मूल्यांकन करता है। इसका प्राकृतिक भाषा '