if պայմանները կարող են ունենալ else բլոկներ, որոնք կատարվում են if-ի պայմանը չբավարարելու դեպքում: Ինչպես 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!')
Ծրագիրը կհուշի օգտվողին մուտքագրել իր անունը, քանի դեռ դա Alice չէ: Այն դեպքում, երբ անունը վերջապես Alice լինի, պայմանի name != Alice չի բավարարվի, և ծրագիրը կմտնի else բլոկի մեջ, որտեղ այն կտպի Hi, Alice!:
Չե՞նք կարող դա անել while-ից դուրս, անմիջապես print('End!')-ից առաջ:
Այս օրինակում՝ այո՛։ Բայց while ... else-ն իսկապես օգտակար է, երբ գործ ունենք break-ի հետ: Այն դեպքում, երբ մենք դուրս ենք գալիս while ցիկլից break-ի պատճառով, else-ը չի կատարվի, քանի որ պայմանը դեռ պահպանվում էր, բայց մենք դուրս եկանք վաղաժամ break-ի պատճառով։ Այս պահվածքի համար քննարկումներ էին գնում 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 ցիկլը ընդհատվի break-ի պատճառով, 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։