अध्याय 10

while लूप — शर्त सत्य रहने तक चलना

एक ही काम को बार-बार दोहराना, अनंत लूप कैसे बनते हैं और उन्हें कैसे रोकें, break और continue, तथा मान्य इनपुट मिलने तक पूछते रहना।

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

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

पिछले पाठ में हमने अमान्य इनपुट को पकड़ना सीखा — जब कोई twenty टाइप करता है, तो प्रोग्राम कह सकता है "यह एक संख्या नहीं है"।

लेकिन ऐसा कहने के बाद वह क्या करता है? वह रुक जाता है। उपयोगकर्ता को पूरा प्रोग्राम फिर से चलाना पड़ता है। कोई भी वास्तविक सॉफ़्टवेयर ऐसा व्यवहार नहीं करता — वह फिर से पूछता है, और तब तक पूछता रहता है जब तक कि उसे कोई मान्य उत्तर नहीं मिल जाता।

लूप इसी काम के लिए होते हैं: एक ही काम को बार-बार दोहराना, जब तक उसकी आवश्यकता हो। आज हम while सीखते हैं, जो तब तक चलता है जब तक कि कोई शर्त सत्य बनी रहती है।

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

  • while लूप लिखना और यह बताना कि यह कब रुकेगा
  • अनंत लूप (infinite loops) को पहचानना और Ctrl + C से रोकना
  • लूप के अंदर योग (accumulator) और गिनती जोड़ना
  • break और continue का सही स्थानों पर उपयोग करना
  • मान्य इनपुट मिलने तक लगातार पूछते रहना

पूर्वापेक्षाएँ: निर्णय लेना — if, elif, else.


सबसे सरल लूप

python
count = 3

while count > 0:
    print(count)
    count = count - 1

print("Go")
text
3
2
1
Go

यह संरचना दिखने में बिल्कुल if जैसी है — शर्त, कोलन, इंडेंटेड ब्लॉक। केवल एक बड़ा अंतर है: if शर्त को केवल एक बार जाँचता है; while ब्लॉक समाप्त होने पर हर बार शर्त को दोबारा जाँचता है।

प्रत्येक कार्यशील while लूप के तीन भाग होते हैं:

  • एक प्रारंभिक मान — लूप से पहले (count = 3)
  • एक शर्त — कब तक चलते रहना है (count > 0)
  • एक परिवर्तन — ब्लॉक के अंदर कुछ ऐसा जो अंततः शर्त को असत्य बना दे (count = count - 1)

अनंत लूप (Infinite loops)

यदि तीसरा भाग छूट जाए तो क्या होता है:

python
count = 3

while count > 0:
    print(count)

यह हमेशा के लिए 3 प्रिंट करता रहेगा।

इसे कैसे रोकें: टर्मिनल में Ctrl + C दबाएँ। यह तुरंत रुक जाता है।

अनंत लूप सीखना सीखने की प्रक्रिया का एक सामान्य हिस्सा है। जब भी आप लूप लिखें, बस खुद से एक बार पूछें: "यह शर्त कब और कैसे असत्य होगी?"

संचय करना (Accumulation)

लूप का सबसे आम काम किसी चीज़ को संचित करना होता है — एक योग, एक गिनती:

python
total = 0
number = 1

while number <= 5:
    total = total + number
    number = number + 1

print("Sum of 1 to 5:", total)
text
Sum of 1 to 5: 15

total को एक्यूमुलेटर कहा जाता है। ध्यान दें कि यह लूप के बाहर 0 से शुरू होता है।

break — तुरंत बाहर निकलना

break लूप को तुरंत समाप्त कर देता है, भले ही शर्त कुछ भी कह रही हो:

python
number = 1

while number <= 100:
    if number % 7 == 0:
        print("First multiple of 7:", number)
        break
    number = number + 1
text
First multiple of 7: 7

break हमें while True का उपयोग करने की भी अनुमति देता है:

python
while True:
    answer = input("Type 'quit' to exit: ").strip().lower()
    if answer == "quit":
        print("Goodbye")
        break
    print(f"You typed: {answer}")
text
Type 'quit' to exit: hello
You typed: hello
Type 'quit' to exit: QUIT
Goodbye

continue — इस चक्कर को छोड़ना

continue लूप को समाप्त नहीं करता; यह ब्लॉक के शेष भाग को छोड़ देता है और सीधे अगले पुनरावृत्ति (iteration) पर चला जाता है:

python
number = 0

while number < 10:
    number = number + 1
    if number % 2 == 0:
        continue
    print(number)
text
1
3
5
7
9
सावधानी: यदि शर्त को आगे बढ़ाने वाली पंक्ति (number = number + 1) continue के बाद लिखी जाए, तो लूप हमेशा के लिए अटक जाएगा।

मान्य इनपुट मिलने तक पूछते रहना

python
while True:
    raw = input("Your age: ").strip()
    if raw.isdigit():
        age = int(raw)
        break
    print("Please type a whole number, digits only.")

print(f"Thank you. Age recorded as {age}.")
text
Your age: twenty
Please type a whole number, digits only.
Your age: 22.5
Please type a whole number, digits only.
Your age: 22
Thank you. Age recorded as 22.

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

shopping.py:

python
# Keep taking item prices until the user is done, then summarise
total = 0.0
item_count = 0

print("Enter item prices. Type 'done' to finish.")

while True:
    entry = input("Price: ").strip().lower()

    if entry == "done":
        break

    if entry == "":
        print("  Nothing typed — try again.")
        continue

    # Accept only digits and at most one decimal point
    if entry.replace(".", "", 1).isdigit():
        price = float(entry)
        total = total + price
        item_count = item_count + 1
        print(f"  Added {price:.2f}. Running total {total:.2f}")
    else:
        print(f"  '{entry}' is not a price. Try again.")

print()
if item_count == 0:
    print("No items were entered.")
else:
    average = total / item_count
    print(f"Items   : {item_count}")
    print(f"Total   : {total:.2f}")
    print(f"Average : {average:.2f}")
text
Enter item prices. Type 'done' to finish.
Price: 120
  Added 120.00. Running total 120.00
Price: abc
  'abc' is not a price. Try again.
Price: 85.5
  Added 85.50. Running total 205.50
Price: done

Items   : 2
Total   : 205.50
Average : 102.75

जब यह टूटता है

प्रोग्राम रुक नहीं रहा है, टेक्स्ट तेज़ी से भाग रहा है Ctrl + C दबाएँ। फिर जाँचें कि क्या लूप में शर्त बदलने वाली पंक्ति मौजूद है।

लूप कभी चला ही नहीं शर्त पहले से ही असत्य थी। प्रारंभिक मान की जाँच करें।

IndentationError while के बाद की पंक्ति ठीक से इंडेंटेड नहीं है।