'If if' के लिए सही सिंटैक्स क्या है?


284

मैं एक नया पायथन प्रोग्रामर हूं जो 2.6.4 से 3.1.1 तक छलांग लगा रहा है। जब तक मैंने 'और यदि' कथन का उपयोग करने का प्रयास नहीं किया तब तक सब कुछ ठीक हो गया। दुभाषिया मुझे 'if' के बाद 'if' में एक सिंटैक्स त्रुटि देता है यदि किसी कारण से मुझे यह पता नहीं चल पाता है।

def function(a):
    if a == '1':
        print ('1a')
    else if a == '2'
        print ('2a')
    else print ('3a')

function(input('input:'))

मुझे शायद बहुत सरल कुछ याद आ रहा है; हालाँकि, मैं अपने दम पर जवाब नहीं खोज पाया हूँ।


3
मुझे नहीं लगता कि यह 2.6.4 में काम करता है।
wRAR

वास्तव में, पायथन सिंटैक्स और शब्दार्थ का यह तत्व इन संस्करणों के बीच नहीं बदला। संभवतः कभी नहीं।
माइक ग्राहम

यदि आप अजगर में / और पर एक अच्छा ट्यूटोरियल शुरू कर सकते हैं: Dreamsyssoft.com/python-scripting-tutorial/ifelse-tutorial.php
ट्राइटन मैन

जवाबों:


444

अजगर में "और अगर" "एलिफ" लिखा जाता है।
इसके अलावा, आपको एक elifऔर के बाद एक बृहदान्त्र की आवश्यकता है else

एक साधारण प्रश्न का सरल उत्तर। मुझे भी यही समस्या थी, जब मैंने पहली बार (पिछले कुछ हफ्तों में) शुरुआत की थी।

तो आपका कोड पढ़ना चाहिए:

def function(a):
    if a == '1':
        print('1a')
    elif a == '2':
        print('2a')
    else:
        print('3a')

function(input('input:'))

11
कोई चिंता नहीं, हम सभी को कभी न कभी सीखना होगा। मुझे यह अजीब लगता है कि अजगर पठनीयता पर इस तरह के एक योगिनी को जगह देता है और फिर इसके बजाय एल्किफ का उपयोग करता है। मैं सुझाव देता हूं कि अजगर एपीआई मैनुअल को हर समय खुला रखें : docs.python.org/3.1 महत्वपूर्ण लिंक ट्यूटोरियल हैं: docs.python.org/3.1/tutorial/index.html भाषा संदर्भ: docs.python.org/3.1/reference /index.html लाइब्रेरी सन्दर्भ
लिंडन व्हाइट

1
पर्ल एक ही कीवर्ड का उपयोग करता है, और इसके लिए तर्क दुर्घटनाओं को रोकने के लिए था, जहां आप पिछले एक और बयान लिखना समाप्त करना भूल जाते हैं और आप एक और बयान लिखना शुरू करते हैं। जाहिर है कि सी कोड लिखते समय एक आम समस्या थी।
नैट ग्लेन

1
@ नैटग्लेन पर्ल वास्तव में उपयोग करता है elsif, मुझे लगता है कि पायथन को एक चरित्र अधिक कुशल होना चाहिए था । "एलिफ" की उत्पत्ति सी प्रीप्रोसेसर के साथ हुई है, जो #elifकि पायथन एएफआईसीटी से बहुत पहले इस्तेमाल किया गया था । जाहिर है, उस संदर्भ में एकल-टोकन निर्देश मूल्यवान है, क्योंकि पार्सिंग #else if <code>बनाम #else <code that could theoretically even be an if statement>ने एक सिंटैक्स को जटिल कर दिया होगा जो कि बोग-सरल होना था।
FeRD



10

पुराने समय से, if/else ifपायथन में सही वाक्यविन्यास है elif। वैसे, आप शब्दकोश का उपयोग कर सकते हैं यदि आपके पास if/else.eg का एक बहुत कुछ है

d={"1":"1a","2":"2a"}
if not a in d: print("3a")
else: print (d[a])

Msw के लिए, शब्दकोश का उपयोग करके कार्यों को निष्पादित करने का उदाहरण।

def print_one(arg=None):
    print "one"

def print_two(num):
    print "two %s" % num

execfunctions = { 1 : (print_one, ['**arg'] ) , 2 : (print_two , ['**arg'] )}
try:
    execfunctions[1][0]()
except KeyError,e:
    print "Invalid option: ",e

try:
    execfunctions[2][0]("test")
except KeyError,e:
    print "Invalid option: ",e
else:
    sys.exit()

1
आप कर सकते हैं, लेकिन कृपया ऐसा न करें। एक शब्दकोश एक के लिए एक अच्छा प्रतिस्थापन नहीं है elif
एस.लॉट

@ s.lott, ओपी का मामला सरल है। अगर उसे कई मानों के लिए जाँच करनी है, तो एक शब्दकोष है। आप इसे इस्तेमाल न करने की आदत बना सकते हैं, लेकिन मैं इसे इस्तेमाल कर रहा हूं और मुझे यह तरीका अच्छा लगता है कि यह कई कोडिंग से बेहतर है। हेक, मैं भी शब्दकोश का उपयोग कार्यों को निष्पादित करने के लिए करता हूं।
भूतडॉग ghost

1
@ghostdog: मुझे पता है कि आप कार्यों को निष्पादित करने के लिए शब्दकोशों का उपयोग कर सकते हैं, लेकिन विचार मुझे डर लगता है जैसे गणना गोटो या एक साथ Tcl तार चिपकाना और execउन्हें अंतर्ग्रहण करना। क्या यह अच्छा अभ्यास है? क्या आप एक उदाहरण बता सकते हैं?
msw

@msw: यह बहुत अच्छा अभ्यास है। उदाहरण: आप कुछ सरल स्क्रैपिंग अभ्यास के लिए XML स्ट्रीम नहीं पढ़ रहे हैं, लेकिन एक जहां आपको विभिन्न तत्व टैग के लिए अलग-अलग प्रसंस्करण करने की आवश्यकता होती है जैसे कि Excel 2007 स्प्रेडशीट फ़ाइल कई XML दस्तावेज़ों का एक ज़िप है, कुछ बहुत ही जटिल। आपके पास प्रत्येक टैग के लिए एक अलग विधि है। आप एक शब्दकोश के माध्यम से भेजते हैं। डरने की कोई बात नहीं। यदि हैंडलिंग के लिए विधि <foo>है do_foo, तो आप ऐप के शुरू होने पर फ्लाई पर भी तानाशाह का निर्माण कर सकते हैं।
जॉन माकिन

1
ध्यान दें कि शब्दकोश में एक .getविधि है जो आपको एक डिफ़ॉल्ट मान निर्दिष्ट करने देती है। आपका पहला उदाहरण के रूप में लिखा जा सकता हैprint d.get(a, "3a")
कोडेई

4

यहां आपके फ़ंक्शन का थोड़ा सा रीफैक्टरिंग है (यह "और" या "एलिफ" का उपयोग नहीं करता है):

def function(a):
    if a not in (1, 2):
        a = 3
    print(str(a) + "a")

@ ghostdog74: पायथन 3 को "प्रिंट" के लिए कोष्ठक की आवश्यकता होती है।


अजगर 3 ने अजगर 2 के प्रिंट स्टेटमेंट को एक फंक्शन के साथ बदल दिया, इस प्रकार आवश्यक कोष्ठक, और यदि आप ऐसा करने जा रहे हैं, तो आप बस sys.stdout.write
Dan D.

2
होना चाहिए ('1', '2'), सेशन स्ट्रिंग्स का उपयोग कर रहा है
pri23c

2
def function(a):
    if a == '1':
        print ('1a')
    else if a == '2'
        print ('2a')
    else print ('3a')

इसे सुधारा जाना चाहिए:

def function(a):
    if a == '1':
        print('1a')
    elif a == '2':
        print('2a')
    else:
        print('3a')

जैसा कि आप देख सकते हैं, अन्यथा अगर एलिफ में बदल दिया जाना चाहिए, तो '2' के बाद कॉलन होना चाहिए और फिर, अन्य विवरण के बाद एक नई लाइन होनी चाहिए, और प्रिंट और कोष्ठक के बीच की जगह को बंद करना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.