While циклі
Медеу бөгетіне апаратын баспалдақта 842 саты бар. Жоғарыға жету үшін не істейсің? Бір сатыны басасың, тексересің — «жеттім бе?» — жоқ болса, келесі сатыны басасың. Дәл осылай, «әлі жеткен жоқпын, тағы бір қадам» деп қайталай беретін әрекет — программалауда ЦИКЛ деп аталады. Бұл сабақта Python-дың бірінші цикл операторымен танысамыз — while: қайталану саны АЛДЫН АЛА БЕЛГІСІЗ болған жағдайдың хас операторы.
Күнделікті өміріңе қара: сабаққа күн сайын барасың, ұнаған әнді бірнеше рет тыңдайсың, түсінбеген тапсырманы түсінгенше қайта оқисың. Бәрінде ортақ нәрсе — БІР ӘРЕКЕТТІ БІРНЕШЕ РЕТ ҚАЙТАЛАУ.
Цикл — берілген шарт орындалғанша бірнеше рет орындалатын тізбектелген нұсқаулық.
Ойлан: 100 санды 2-ден бастап 5 қадаммен қосу керек болса, print пен + операторын 20 рет қолмен жазасың ба? Уақыт қорек! Цикл дәл осындай ЖАЛЫҚТЫРАТЫН, ҚАЙТАЛАНАТЫН жұмысты БІР РЕТ жазылған кодпен автоматтандырады.
Python-да екі цикл операторы бар: for (қайталану саны АЛДЫН АЛА белгілі болғанда) және while (қайталану саны АЛДЫН АЛА БЕЛГІСІЗ болғанда — тек «қашан тоқтау керегі» ғана белгілі). Бүгін — while.
Цикл денесі — бірнеше рет орындалатын, бірдей шегініспен жазылған команда(лар). Итерация — цикл денесінің бір рет орындалуы.
while <шарт>:
цикл денесі Логикасы: Excel-дегі ЕСЛИ-ге ұқсас — шарт тексеріледі. Бірақ ЕСЛИ бір рет тексерсе, while ҚАЙТА-ҚАЙТА тексереді: шарт АҚИҚАТ болғанша цикл денесі орындала береді. Шарт ЖАЛҒАН болған сәтте — цикл тоқтайды.
While-дің «жүрегі» — цикл параметрі (санауыш): циклдің өзгеретін айнымалысы. Оған үш нәрсе қажет: бастапқы мән (циклге дейін беріледі), шарт (санауышқа қатысты), өзгеру (цикл ІШІНДЕ санауыш міндетті түрде өзгеруі керек, әйтпесе шарт ешқашан жалған болмайды!).
Цикл параметрі (санауыш) — циклдің әрбір қайталануында жаңа мән қабылдайтын айнымалы.
i = 2 while i <= 20: print(i) i += 2Тексеру: i=2 (шығады, i→4), i=4 (шығады, i→6)... i=20 (шығады, i→22). i=22 болғанда 22≤20 ЖАЛҒАН, цикл тоқтайды.
Жауабы: 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 — әрқайсысы жаңа жолда.
Санауыш ЕКІ бағытта да жұмыс істей алады:
| Артатын санауыш | Кемитін санауыш |
|---|---|
k=0; while k<5: ...; k=k+1 | k=5; while k>0: ...; k=k-1 |
Екеуі де дәл 5 рет «Сәлем» шығарады! Тек логикасы қарама-қарсы: біріншісі «нешеу шықты» деп санайды, екіншісі «нешеу қалды» деп санайды.
1-итерация: x=8, y=16 (екеуі де АҚИҚАТ) → жалғасады.
2-итерация: x=9, y=17 → жалғасады.
3-итерация: x=10, y=18 → шығады.
4-тексеру: x=10, x<10 ЖАЛҒАН → тоқтайды.
Жауабы: цикл 3 рет орындалды: «8 16», «9 17», «10 18».
Шексіз цикл — циклден шығу шарты ешқашан орындалмайтын цикл. Бұл — орындауды қажет етпейтін логикалық қате.
k = 1 while k > 0: print('Сәлем') k = k + 1
k әрқашан ОҢ сан болып өсе береді, k > 0 шарты ЕШҚАШАН жалған болмайды — «Сәлем» экранға шексіз шығады. Мұндай программаны тоқтату үшін Ctrl+C пернелер тіркесімін басу керек.
Циклдің ІШІНДЕ тағы бір цикл болуы мүмкін бе? Иә! Бұл — кірістірілген (ішкі) цикл.
Кірістірілген цикл — бір цикл операторының басқа цикл операторының ІШІНДЕ орналасуы. Сыртқы циклдің әр итерациясы үшін ішкі цикл БАРЛЫҚ мүмкін итерацияларын толық орындайды.
n = int(input('n = ')) i = 2 while i < n // 2: while not n % i: print(i, end=' ') n //= i i += 1Идея: сыртқы цикл мүмкін бөлгіштерді сұрыптайды, ішкі цикл санды сол бөлгішке мүмкіндігінше бөледі.
Жауабы: n=27 → «3 3 3»; n=1000 → «2 2 2 5 5 5».
- While — «шарт орындалып тұрған кезде қайтала» операторы: қайталану саны алдын ала белгісіз болғанда қолданылады.
- Міндетті үш бөлік: бастапқы мән, шарт, санауыштың циклдегі өзгеруі.
- Санауыш арта да, кеми де алады; шарттар and/or арқылы күрделене алады.
- Кірістірілген цикл: сыртқы бір қадамда ішкі толық айналады.
- Шексіз цикл — санауыш өзгермегендіктен пайда болады; тоқтату — Ctrl+C.