अध्याय 09

निर्णय लेना — if, elif, else

शर्त के आधार पर अलग रास्ते चुनना, पायथन में इंडेंटेशन का क्या महत्व है, और शर्तों का क्रम गलत होने पर आने वाला अदृश्य बग।

35 मिनटPython 3.12
  1. 1समस्या
  2. 2समझें
  3. 3उदाहरण
  4. 4अनुमान
  5. 5स्वयं करें
  6. 6चुनौती

वह समस्या जिसे हम हल कर रहे हैं

पिछले पाठ में हमने प्रश्न पूछना सीखा — क्या age >= 18 सत्य है या असत्य? लेकिन उत्तर जानने के बाद भी, प्रोग्राम ने कुछ नहीं किया; उसने केवल True या False प्रिंट किया।

अब उस उत्तर पर कार्रवाई करने का समय है। यदि शर्त पूरी होती है तो एक रास्ता, यदि नहीं होती तो दूसरा रास्ता। यही वह क्षण है जहाँ कोड केवल चरणों की सूची न रहकर निर्णय लेना शुरू करता है।

और यहीं पायथन कई अन्य प्रोग्रामिंग भाषाओं से अलग है: कौन सी पंक्तियाँ शर्त के अंदर हैं और कौन सी बाहर, यह व्हाट्सएप/इंडेंटेशन (खाली स्थान) द्वारा तय होता है। यहाँ कोई कर्ली ब्रेसेस {} नहीं होते। शुरुआत में यह थोड़ा अजीब लगता है, लेकिन बाद में आपको यह पसंद आने लगता है — क्योंकि जो कोड दिखने में व्यवस्थित होता है, वह वास्तव में व्यवस्थित होता है।

इस मिशन के अंत तक आप सीखेंगे

  • if के साथ सशर्त कोड चलाना
  • else के साथ एक विकल्प और elif के साथ कई विकल्प प्रदान करना
  • सही इंडेंटेशन देना, और IndentationError को पढ़ना व ठीक करना
  • यह समझना कि शर्तों का क्रम क्यों मायने रखता है — यहाँ का सबसे बड़ा जाल
  • एक शर्त के अंदर दूसरी शर्त को नेस्ट करना

पूर्वापेक्षाएँ: True और False — प्रश्न पूछना सीखना.


सबसे सरल रूप

python
age = 22

if age >= 18:
    print("You may enter")

print("Program finished")
text
You may enter
Program finished

इसकी बनावट के तीन भाग हैं:

  1. शब्द if, उसके बाद एक शर्त
  2. शर्त के अंत में एक कोलन : — इसे छोड़ना सबसे आम गलती है
  3. आने वाली पंक्तियाँ, जो चार स्पेस से इंडेंटेड होती हैं — ये इंडेंटेड पंक्तियाँ ही शर्त के दायरे में होती हैं

यदि age का मान 15 होता, तो पहला print नहीं चलता, लेकिन अंतिम वाला फिर भी चलता — क्योंकि वह शर्त के बाहर है।

इंडेंटेशन ही अर्थ है

इन दोनों प्रोग्रामों में लगभग समान वर्ण हैं, लेकिन वे पूरी तरह से अलग व्यवहार करते हैं:

python
score = 30

if score >= 50:
    print("Passed")
    print("Certificate issued")

इसे चलाएँ और टर्मिनल में कुछ भी दिखाई नहीं देगा — दोनों पंक्तियाँ शर्त के अंदर हैं, और शर्त असत्य है।

python
score = 30

if score >= 50:
    print("Passed")
print("Certificate issued")
text
Certificate issued

दूसरा print अब शर्त के बाहर है, इसलिए यह हमेशा चलता है — और अनुत्तीर्ण छात्र को प्रमाण पत्र जारी कर दिया गया! गलत इंडेंट की गई एक पंक्ति व्यावसायिक नियम को तोड़ देती है, और पायथन कोई त्रुटि नहीं देता क्योंकि दोनों संस्करण मान्य कोड हैं।

चार स्पेस, टैब नहीं। पायथन दोनों को स्वीकार करता है, लेकिन एक फ़ाइल में उन्हें मिलाने से TabError आता है। VS Code में Tab दबाने पर चार स्पेस डाले जाते हैं — यही पायथन का आधिकारिक नियम है।

else — दूसरा रास्ता

python
age = 15

if age >= 18:
    print("You may enter")
else:
    print("Sorry, adults only")
text
Sorry, adults only

else के साथ कोई शर्त नहीं होती, क्योंकि इसकी शर्त पहले ही निहित है — "यदि उपरोक्त में से कुछ भी सत्य नहीं था"।

elif — कई रास्ते

python
marks = 72

if marks >= 80:
    grade = "A"
elif marks >= 70:
    grade = "B"
elif marks >= 60:
    grade = "C"
elif marks >= 40:
    grade = "D"
else:
    grade = "F"

print(f"Marks {marks} gives grade {grade}")
text
Marks 72 gives grade B

elif का अर्थ है "अन्यथा, यदि" (else if)। पायथन पहली सत्य शर्त के ब्लॉक को चलाता है और फिर पूरी शृंखला से बाहर निकल जाता है।

और यहाँ सबसे बड़ा जाल है

क्योंकि elif पहली सत्य शर्त पर रुक जाता है, क्रम गलत होने पर प्रोग्राम चलता है, कोई त्रुटि नहीं देता, लेकिन गलत उत्तर देता है:

python
marks = 95

if marks >= 40:
    grade = "Pass"
elif marks >= 80:
    grade = "Excellent"
else:
    grade = "Fail"

print(grade)
text
Pass

95 अंक होने पर भी Excellent नहीं मिला! क्योंकि 95 >= 40 तुरंत सत्य हो गया, और पायथन वहीं रुक गया।

याद रखने का नियम: सबसे सख्त और विशिष्ट शर्त सबसे पहले रखें और सबसे ढीली शर्त अंत में।

शर्त के अंदर शर्त (Nesting)

python
is_logged_in = True
is_admin = False

if is_logged_in:
    if is_admin:
        print("Welcome, admin")
    else:
        print("Welcome, user")
else:
    print("Please log in")
text
Welcome, user

अक्सर and ऑपरेटर का उपयोग करके इसे और स्पष्ट बनाया जा सकता है:

python
is_logged_in = True
is_admin = False

if is_logged_in and is_admin:
    print("Welcome, admin")
elif is_logged_in:
    print("Welcome, user")
else:
    print("Please log in")
text
Welcome, user

एक संपूर्ण उदाहरण

fare.py:

python
# Work out a ticket fare from age and day of week
age = int(input("Passenger age : "))
day = input("Day of week   : ").strip().lower()

base_fare = 120.0

# Most specific rule first, loosest last
if age < 5:
    fare = 0.0
    category = "Infant"
elif age < 18:
    fare = base_fare * 0.5
    category = "Child"
elif age >= 60:
    fare = base_fare * 0.7
    category = "Senior"
else:
    fare = base_fare
    category = "Adult"

is_weekend = day == "saturday" or day == "sunday"
if is_weekend:
    fare = fare * 1.2

print()
print(f"Category : {category}")
print(f"Weekend  : {is_weekend}")
print(f"Fare     : {fare:.2f}")
text
Passenger age : 65
Day of week   : Sunday

Category : Senior
Weekend  : True
Fare     : 100.80

जब यह टूटता है

SyntaxError: expected ':' if, elif या else के अंत में कोलन छूट गया है।

IndentationError: expected an indented block after 'if' statement if के बाद की पंक्ति इंडेंट नहीं की गई थी।

IndentationError: unexpected indent कोई पंक्ति बिना कारण इंडेंट की गई है।

TabError: inconsistent use of tabs and spaces in indentation टैब और स्पेस मिल गए हैं।