निर्णय लेना — if, elif, else
शर्त के आधार पर अलग रास्ते चुनना, पायथन में इंडेंटेशन का क्या महत्व है, और शर्तों का क्रम गलत होने पर आने वाला अदृश्य बग।
- 1समस्या
- 2समझें
- 3उदाहरण
- 4अनुमान
- 5स्वयं करें
- 6चुनौती
वह समस्या जिसे हम हल कर रहे हैं
पिछले पाठ में हमने प्रश्न पूछना सीखा — क्या age >= 18 सत्य है या असत्य? लेकिन उत्तर जानने के बाद भी, प्रोग्राम ने कुछ नहीं किया; उसने केवल True या False प्रिंट किया।
अब उस उत्तर पर कार्रवाई करने का समय है। यदि शर्त पूरी होती है तो एक रास्ता, यदि नहीं होती तो दूसरा रास्ता। यही वह क्षण है जहाँ कोड केवल चरणों की सूची न रहकर निर्णय लेना शुरू करता है।
और यहीं पायथन कई अन्य प्रोग्रामिंग भाषाओं से अलग है: कौन सी पंक्तियाँ शर्त के अंदर हैं और कौन सी बाहर, यह व्हाट्सएप/इंडेंटेशन (खाली स्थान) द्वारा तय होता है। यहाँ कोई कर्ली ब्रेसेस {} नहीं होते। शुरुआत में यह थोड़ा अजीब लगता है, लेकिन बाद में आपको यह पसंद आने लगता है — क्योंकि जो कोड दिखने में व्यवस्थित होता है, वह वास्तव में व्यवस्थित होता है।
इस मिशन के अंत तक आप सीखेंगे
ifके साथ सशर्त कोड चलानाelseके साथ एक विकल्प औरelifके साथ कई विकल्प प्रदान करना- सही इंडेंटेशन देना, और
IndentationErrorको पढ़ना व ठीक करना - यह समझना कि शर्तों का क्रम क्यों मायने रखता है — यहाँ का सबसे बड़ा जाल
- एक शर्त के अंदर दूसरी शर्त को नेस्ट करना
पूर्वापेक्षाएँ: True और False — प्रश्न पूछना सीखना.
सबसे सरल रूप
age = 22
if age >= 18:
print("You may enter")
print("Program finished")You may enter
Program finishedइसकी बनावट के तीन भाग हैं:
- शब्द
if, उसके बाद एक शर्त - शर्त के अंत में एक कोलन
:— इसे छोड़ना सबसे आम गलती है - आने वाली पंक्तियाँ, जो चार स्पेस से इंडेंटेड होती हैं — ये इंडेंटेड पंक्तियाँ ही शर्त के दायरे में होती हैं
यदि age का मान 15 होता, तो पहला print नहीं चलता, लेकिन अंतिम वाला फिर भी चलता — क्योंकि वह शर्त के बाहर है।
इंडेंटेशन ही अर्थ है
इन दोनों प्रोग्रामों में लगभग समान वर्ण हैं, लेकिन वे पूरी तरह से अलग व्यवहार करते हैं:
score = 30
if score >= 50:
print("Passed")
print("Certificate issued")इसे चलाएँ और टर्मिनल में कुछ भी दिखाई नहीं देगा — दोनों पंक्तियाँ शर्त के अंदर हैं, और शर्त असत्य है।
score = 30
if score >= 50:
print("Passed")
print("Certificate issued")Certificate issuedदूसरा print अब शर्त के बाहर है, इसलिए यह हमेशा चलता है — और अनुत्तीर्ण छात्र को प्रमाण पत्र जारी कर दिया गया! गलत इंडेंट की गई एक पंक्ति व्यावसायिक नियम को तोड़ देती है, और पायथन कोई त्रुटि नहीं देता क्योंकि दोनों संस्करण मान्य कोड हैं।
चार स्पेस, टैब नहीं। पायथन दोनों को स्वीकार करता है, लेकिन एक फ़ाइल में उन्हें मिलाने से TabError आता है। VS Code में Tab दबाने पर चार स्पेस डाले जाते हैं — यही पायथन का आधिकारिक नियम है।else — दूसरा रास्ता
age = 15
if age >= 18:
print("You may enter")
else:
print("Sorry, adults only")Sorry, adults onlyelse के साथ कोई शर्त नहीं होती, क्योंकि इसकी शर्त पहले ही निहित है — "यदि उपरोक्त में से कुछ भी सत्य नहीं था"।
elif — कई रास्ते
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}")Marks 72 gives grade Belif का अर्थ है "अन्यथा, यदि" (else if)। पायथन पहली सत्य शर्त के ब्लॉक को चलाता है और फिर पूरी शृंखला से बाहर निकल जाता है।
और यहाँ सबसे बड़ा जाल है
क्योंकि elif पहली सत्य शर्त पर रुक जाता है, क्रम गलत होने पर प्रोग्राम चलता है, कोई त्रुटि नहीं देता, लेकिन गलत उत्तर देता है:
marks = 95
if marks >= 40:
grade = "Pass"
elif marks >= 80:
grade = "Excellent"
else:
grade = "Fail"
print(grade)Pass95 अंक होने पर भी Excellent नहीं मिला! क्योंकि 95 >= 40 तुरंत सत्य हो गया, और पायथन वहीं रुक गया।
याद रखने का नियम: सबसे सख्त और विशिष्ट शर्त सबसे पहले रखें और सबसे ढीली शर्त अंत में।
शर्त के अंदर शर्त (Nesting)
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")Welcome, userअक्सर and ऑपरेटर का उपयोग करके इसे और स्पष्ट बनाया जा सकता है:
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")Welcome, userएक संपूर्ण उदाहरण
fare.py:
# 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}")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 टैब और स्पेस मिल गए हैं।
चरण 4 / 6 — अनुमान
अपनी समझ की जाँच करें
With 85 marks, what does this program print?
marks = 85
if marks >= 40:
print("Pass")
elif marks >= 80:
print("Excellent")
else:
print("Fail")- APass
- BExcellent
- CPass Excellent
- DExcellent Pass
What does this program print?
score = 30
if score >= 50:
print("Passed")
print("Done")- ADone
- BPassed Done
- CPassed
- DNothing at all
Even when the person types 25, this stops with a TypeError. What is the cause, and the fix?
age = input("Age: ")
if age >= 18:
print("Adult")
else:
print("Minor")- A`input()` gives text, and text cannot be compared with a number — it needs `age = int(input("Age: "))`
- B`>=` cannot be used in an `if` condition; it has to be `>`
- C`age` is a reserved word, so the comparison failed
- DAn `elif` is required before an `else`
उत्तर देने के लिए अकाउंट आवश्यक है
अपने उत्तर जाँचने के लिए साइन इन करें
प्रश्न ऊपर दिए गए हैं, और मन में उत्तर सोचना ही मुख्य कार्य है। सही उत्तर, व्याख्या और तीन-स्तरीय संकेत देखने के लिए साइन इन करें।
आपकी बारी
bmi.py नामक एक फ़ाइल लिखें जो मीटर में ऊँचाई और किलोग्राम में वज़न लेती है, BMI की गणना करती है और श्रेणी बताती है।
सूत्र: bmi = weight / (height * height)
श्रेणियाँ:
- 18.5 से कम — Underweight
- 18.5 से 24.9 — Normal
- 25 से 29.9 — Overweight
- 30 और उससे अधिक — Obese
चार आवश्यकताएँ:
- BMI को एक दशमलव स्थान तक दिखाएँ
- शर्तों को इस प्रकार क्रमबद्ध करें कि चारों श्रेणियाँ सही ढंग से काम करें
- यदि ऊँचाई
0है, तो विभाजन से पहले रुकें और एक संदेश प्रिंट करें — अन्यथाZeroDivisionErrorआएगा - इसे चार अलग-अलग मानों के साथ चलाएँ और सीमाओं (जैसे ठीक 25 BMI) पर परीक्षण करें।
There is more in this mission
What you read above is the complete mission — nothing was cut out of it. Pro adds:
- भीतर वास्तव में क्या होता है — पायथन इसे कैसे निष्पादित करता है
- अभ्यास का संपूर्ण समाधान, चरण-दर-चरण स्पष्टीकरण के साथ
- कठिन अतिरिक्त अभ्यास
- इस विषय पर साक्षात्कार में क्या पूछा जाता है और उसका आदर्श उत्तर
Step 6 of 6
चुनौती — the chapter quiz
सरल से कठिन — दस प्रश्न, अंतिम वाले जानबूझकर चुनौतीपूर्ण बनाए गए हैं।
Sign in to take the quiz