अध्याय 08

True और False — प्रश्न पूछना सीखना

तुलना ऑपरेटर, and / or / not, शृंखलाबद्ध तुलना, और कौन से मान पायथन की नज़र में असत्य हैं — शर्तें लिखने से पहले आवश्यक आधार।

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

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

एक प्रोग्राम को कोई निर्णय लेना होता है: क्या इस ऑर्डर पर छूट मिलनी चाहिए? क्या पासवर्ड पर्याप्त लंबा है? क्या वस्तु स्टॉक में उपलब्ध है?

निर्णय लेने वाला कोड अगले मिशन (if) में आएगा। लेकिन उससे पहले आपको वह चीज़ चाहिए जिस पर निर्णय आधारित होता है — एक प्रश्न जिसका उत्तर हाँ या ना हो। पायथन में इन उत्तरों को True और False कहा जाता है, और इस प्रकार को bool कहा जाता है।

आज हम केवल प्रश्न पूछना सीखते हैं, निर्णय लेना नहीं। इसे इस तरह अलग करना जानबूझकर किया गया है: if लिखते समय लोग जो गलतियाँ करते हैं, उनमें से लगभग हर गलती वास्तव में प्रश्न में होती है, न कि if में।

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

  • छह तुलना ऑपरेटरों का उपयोग करना
  • = और == के बीच का अंतर पहचानना
  • and, or और not के साथ छोटे प्रश्नों को बड़े प्रश्नों में जोड़ना
  • 18 <= age <= 60 जैसी शृंखलाबद्ध तुलनाएँ लिखना
  • यह बताना कि पायथन किन मानों को False न होने पर भी असत्य मानता है

पूर्वापेक्षाएँ: उपयोगकर्ता से इनपुट लेना.


छह तुलना ऑपरेटर

python
age = 22

print(age == 22)
print(age != 22)
print(age > 18)
print(age < 18)
print(age >= 22)
print(age <= 21)
text
True
False
True
False
True
False

प्रत्येक तुलना एक मान उत्पन्न करती है — True या False। इसका मतलब है कि एक तुलना को वेरिएबल में संग्रहीत किया जा सकता है:

python
age = 22
is_adult = age >= 18
print(is_adult)
print(type(is_adult))
text
True
<class 'bool'>

इस तरह नामकरण करने से कोड पढ़ना कहीं अधिक आसान हो जाता है — is_adult स्पष्ट बताता है कि क्या जाँचा जा रहा है, जबकि age >= 18 पाठक को सोचने पर मजबूर करता है।

= और == — एक अक्षर, अलग अर्थ

python
total = 100          # एक निर्देश: 100 को total में रखो
print(total == 100)  # एक प्रश्न: क्या total 100 है?
text
True
  • = संग्रहीत करता है (असाइनमेंट)
  • == पूछता है (तुलना)

यदि आप शर्त के स्थान पर = लिखते हैं, तो पायथन 3 एक स्पष्ट त्रुटि देता है:

text
SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?

टेक्स्ट की तुलना

python
print("rafi" == "rafi")
print("Rafi" == "rafi")
print("apple" < "banana")
print(len("password123") >= 8)
text
True
False
True
True

दो बातों पर ध्यान दें:

केस (अक्षर का आकार) मायने रखता है। "Rafi" और "rafi" समान नहीं हैं। उपयोगकर्ता द्वारा टाइप किए गए टेक्स्ट से तुलना करते समय, पहले .lower() चलाएँ:

python
typed = "  RAFI "
print(typed == "rafi")
print(typed.strip().lower() == "rafi")
text
False
True

< टेक्स्ट पर भी काम करता है, शब्दकोश क्रम के अनुसार — इसलिए "apple" < "banana"। यह नामों की सूची को क्रमबद्ध करने का आधार है।

and, or, not

तीन शब्द छोटे प्रश्नों को बड़े प्रश्नों में जोड़ते हैं:

python
age = 22
has_id = True

print(age >= 18 and has_id)
print(age >= 60 or has_id)
print(not has_id)
text
True
True
False
  • and — तब सत्य जब दोनों सत्य हों
  • or — तब सत्य जब कम से कम एक सत्य हो
  • not — मान को उलट देता है
python
print(True and True)
print(True and False)
print(False and False)
print(True or False)
print(False or False)
text
True
False
False
True
False
or का अर्थ "एक या अधिक" है, "केवल एक" नहीं। बोलचाल में "चाय या कॉफी?" का अर्थ किसी एक से होता है। पायथन का or तब भी True होता है जब दोनों पक्ष सत्य हों।

not हमेशा अपने तुरंत बाद आने वाले पर लागू होता है, और यह सबसे पहले चलता है। क्रम है: पहले not, फिर and, और अंत में or।

python
print(True or False and False)
print((True or False) and False)
text
True
False

संदेह होने पर कोष्ठक () का उपयोग करें।

शृंखलाबद्ध तुलना (Chained comparisons)

यह जाँचने के लिए कि क्या कोई मान दो सीमाओं के बीच है, पायथन आपको इसे गणित की तरह लिखने की अनुमति देता है:

python
marks = 72

print(0 <= marks <= 100)
print(marks > 60 and marks < 80)
print(60 < marks < 80)
text
True
True
True

कौन से मान पायथन में असत्य माने जाते हैं

केवल False ही नहीं — कुछ सामान्य मान भी असत्य माने जाते हैं:

python
print(bool(0))
print(bool(1))
print(bool(-5))
print(bool(""))
print(bool("hello"))
print(bool("0"))
print(bool("False"))
text
False
True
True
False
True
True
True

नियम एक पंक्ति में: शून्य और खाली चीज़ें असत्य हैं, बाकी सब सत्य हैं। इसलिए 0 असत्य है और खाली स्ट्रिंग "" असत्य है; लेकिन -5 सत्य है (यह शून्य नहीं है), और "0" और "False" सत्य हैं — क्योंकि वे खाली नहीं हैं।

input() से आने वाली हर चीज़ टेक्स्ट होती है, इसलिए जब कोई 0 टाइप करता है, तो आपके पास "0" होता है — जिसे पायथन सत्य मानता है। संख्याओं की तुलना करने के लिए आपको पहले int() से बदलना होगा।


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

eligibility.py:

python
# Check a discount rule without deciding anything yet
age = int(input("Age            : "))
years_member = int(input("Years a member : "))
order_total = float(input("Order total    : "))

is_adult = age >= 18
is_senior = age >= 60
is_loyal = years_member >= 2
is_large_order = order_total >= 1000

# The rule: adults who are either long-standing members or spending a lot
gets_discount = is_adult and (is_loyal or is_large_order)

print()
print(f"Adult          : {is_adult}")
print(f"Senior         : {is_senior}")
print(f"Loyal member   : {is_loyal}")
print(f"Large order    : {is_large_order}")
print(f"Gets discount  : {gets_discount}")
text
Age            : 34
Years a member : 1
Order total    : 1500

Adult          : True
Senior         : False
Loyal member   : False
Large order    : True
Gets discount  : True

जब यह टूटता है

SyntaxError: invalid syntax. Maybe you meant '==' ... जहाँ तुलना होनी चाहिए वहाँ = लिखा गया है। == का उपयोग करें।

ये बराबर होने चाहिए, लेकिन मुझे False मिलता है तीन चीज़ें जाँचें: अतिरिक्त स्पेस (.strip()), अक्षरों का आकार (.lower()), और प्रकार — "22" == 22 हमेशा False होता है।

TypeError: '<' not supported between instances of 'str' and 'int' आपने टेक्स्ट की तुलना संख्या से की, संभवतः input() को बदलना भूल गए। इसे int() में लपेटें।