Лекция · 4.1

While циклі

Медеу бөгетіне апаратын баспалдақта 842 саты бар. Жоғарыға жету үшін не істейсің? Бір сатыны басасың, тексересің — «жеттім бе?» — жоқ болса, келесі сатыны басасың. Дәл осылай, «әлі жеткен жоқпын, тағы бір қадам» деп қайталай беретін әрекет — программалауда ЦИКЛ деп аталады. Бұл сабақта Python-дың бірінші цикл операторымен танысамыз — while: қайталану саны АЛДЫН АЛА БЕЛГІСІЗ болған жағдайдың хас операторы.

Цикл деген не

Күнделікті өміріңе қара: сабаққа күн сайын барасың, ұнаған әнді бірнеше рет тыңдайсың, түсінбеген тапсырманы түсінгенше қайта оқисың. Бәрінде ортақ нәрсе — БІР ӘРЕКЕТТІ БІРНЕШЕ РЕТ ҚАЙТАЛАУ.

Анықтама
Цикл — берілген шарт орындалғанша бірнеше рет орындалатын тізбектелген нұсқаулық.

Ойлан: 100 санды 2-ден бастап 5 қадаммен қосу керек болса, print пен + операторын 20 рет қолмен жазасың ба? Уақыт қорек! Цикл дәл осындай ЖАЛЫҚТЫРАТЫН, ҚАЙТАЛАНАТЫН жұмысты БІР РЕТ жазылған кодпен автоматтандырады.

Python-да екі цикл операторы бар: for (қайталану саны АЛДЫН АЛА белгілі болғанда) және while (қайталану саны АЛДЫН АЛА БЕЛГІСІЗ болғанда — тек «қашан тоқтау керегі» ғана белгілі). Бүгін — while.

Анықтама
Цикл денесі — бірнеше рет орындалатын, бірдей шегініспен жазылған команда(лар). Итерация — цикл денесінің бір рет орындалуы.
While синтаксисі
while <шарт>:
    цикл денесі

Логикасы: Excel-дегі ЕСЛИ-ге ұқсас — шарт тексеріледі. Бірақ ЕСЛИ бір рет тексерсе, while ҚАЙТА-ҚАЙТА тексереді: шарт АҚИҚАТ болғанша цикл денесі орындала береді. Шарт ЖАЛҒАН болған сәтте — цикл тоқтайды.

⚠️
Есіңде болсын: алғашқы тексерудің өзінде шарт жалған болса, цикл денесі БІРДЕ ДЕ орындалмайды!
Цикл параметрі (санауыш)

While-дің «жүрегі» — цикл параметрі (санауыш): циклдің өзгеретін айнымалысы. Оған үш нәрсе қажет: бастапқы мән (циклге дейін беріледі), шарт (санауышқа қатысты), өзгеру (цикл ІШІНДЕ санауыш міндетті түрде өзгеруі керек, әйтпесе шарт ешқашан жалған болмайды!).

Анықтама
Цикл параметрі (санауыш) — циклдің әрбір қайталануында жаңа мән қабылдайтын айнымалы.
Есеп: 2-ден 20-ға дейінгі барлық жұп сандарды экранға шығар.
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+1k=5; while k>0: ...; k=k-1

Екеуі де дәл 5 рет «Сәлем» шығарады! Тек логикасы қарама-қарсы: біріншісі «нешеу шықты» деп санайды, екіншісі «нешеу қалды» деп санайды.

Есеп: x=7, y=15. while x<10 and y<20: екеуін де 1-ге арттырып шығар.
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 пернелер тіркесімін басу керек.

⚠️
Ең қауіпті қате: санауышты өзгертетін жолды (i += 2) ұмытып кету! Сонда шарт ешқашан жалған болмайды — цикл МӘҢГІ жұмыс істейді. Программаң тоқтамай жатса — Ctrl+C бас, содан кейін санауыш дұрыс өзгеріп жатыр ма, соны тексер.
Кірістірілген while

Циклдің ІШІНДЕ тағы бір цикл болуы мүмкін бе? Иә! Бұл — кірістірілген (ішкі) цикл.

Анықтама
Кірістірілген цикл — бір цикл операторының басқа цикл операторының ІШІНДЕ орналасуы. Сыртқы циклдің әр итерациясы үшін ішкі цикл БАРЛЫҚ мүмкін итерацияларын толық орындайды.
🕐
Аналогия: кірістірілген цикл — сағат тілі сияқты: секунд тілі 60 рет толық айналғанда, минут тілі БІР рет жылжиды. Сыртқы цикл (минут) баяу, ішкі цикл (секунд) әр сыртқы қадамда ТОЛЫҚ жұмыс істейді.
Есеп: бүтін n санын жай көбейткіштерге жіктеу.
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».
⚠️
Жиі қате: ішкі және сыртқы циклге БІРДЕЙ айнымалы атауын қою (бір-бірінің мәнін бүлдіреді — әрқашан i мен j сияқты бөлек атау қолдан); шегініс қатесі — оператор циклге енбей қалады.
🎯 ҰБТ байланысы
While бойынша тексерілетін дағды — кодты «қолмен» орындай білу.
1
Код бойынша нәтижені есептеу — итерация кестесін жаса, шатаспа.
2
Шексіз циклді анықтау: санауыш өзгере ме, бағыты дұрыс па?
3
and/or логикасы бар күрделі шарттарды тексеру.
4
Жиі қателер: i<=n мен i<n айырмашылығы; санауышты өзгертуді ұмыту.
Сабақ қорытындысы
  • While — «шарт орындалып тұрған кезде қайтала» операторы: қайталану саны алдын ала белгісіз болғанда қолданылады.
  • Міндетті үш бөлік: бастапқы мән, шарт, санауыштың циклдегі өзгеруі.
  • Санауыш арта да, кеми де алады; шарттар and/or арқылы күрделене алады.
  • Кірістірілген цикл: сыртқы бір қадамда ішкі толық айналады.
  • Шексіз цикл — санауыш өзгермегендіктен пайда болады; тоқтату — Ctrl+C.