if कथन में ऐसे else ब्लॉक हो सकते हैं जो तब निष्पादित होते हैं जब if कथन की शर्त पूरी नहीं होती। इसी तरह, while लूप में भी else ब्लॉक हो सकता है, जो तब निष्पादित होगा जब while कथन की शर्त पूरी नहीं होती।
name = input()
if name != 'Alice':
print('I don\'t know you')
else:
print('Hi, Alice!')
print('End!')
name = input()
while name != 'Alice':
print('I don\'t know you')
name = input()
else:
print('Hi, Alice!')
print('End!')
while वाले प्रोग्राम में, जब तक नाम 'Alice' नहीं होता, तब तक यह उपयोगकर्ता से नाम पूछता रहेगा। अगर अंत में नाम 'Alice' होता है, तो शर्त name != 'Alice' गलत होगी, और प्रोग्राम else ब्लॉक में प्रवेश करेगा जहाँ यह Hi, Alice! प्रिंट करेगा।
क्या हम यह काम while के बाहर, print('End!') से ठीक पहले नहीं कर सकते थे?
इस उदाहरण में, हाँ! लेकिन जब हम break स्टेटमेंट्स के साथ काम करते हैं, तो while ... else बहुत काम आता है। अगर हम while लूप के अंदर से ब्रेक करते हैं, तो else निष्पादित नहीं होगा क्योंकि जब प्रोग्राम लूप में प्रवेश किया था, तब शर्त अभी भी सही थी। कुछ लोगों का सुझाव था कि इसे while ... else की जगह while ... nobreak कहा जाए।
कल्पना करें कि हम जांचना चाहते हैं कि संख्या में अंक 5 है या नहीं:
n = 123409087542108
while n != 0:
if n % 10 == 5:
print('The number contains a digit 5!')
break
n //= 10
else:
print('The number does not have a digit 5')
तो, जब भी while लूप ब्रेक होता है, else स्टेटमेंट निष्पादित नहीं होगा। इसलिए अगर संख्या में पहले ही अंक 5 मिल गया है, तो प्रोग्राम दूसरा संदेश प्रिंट नहीं करेगा।
अगर while लूप अंत तक पहुंचता है और शर्त अब सही नहीं होती है, तो else ब्लॉक निष्पादित होगा और प्रोग्राम The number does not have a digit 5 प्रिंट करेगा।
आप while ... else कांसेप्ट को while ... nobreak के रूप में समझ सकते हैं, लेकिन प्रोग्राम में इसे else के साथ लिखते हैं।
चुनौती
इनपुट में एक पूर्णांक दिया गया है। आपका काम यह पता लगाना है कि क्या उसमें अंक 3 या 7 में से कोई है। अगर है, तो आपको प्रिंट करना चाहिए The number contains a digit 3 or 7। अगर नहीं है, तो प्रोग्राम को प्रिंट करना चाहिए The number neither has a digit 3 nor a digit 7।