For циклі
Медеу бөгетінің 842 сатысынан өту керек десек, while циклінде «сатыдамын ба, жеттім бе?» деп үнемі тексеру керек еді. Ал енді сатылар саны АЛДЫН АЛА белгілі болса ше? «842 рет қадам жаса» деп ЖАЙ ҒАНА айтуға болмай ма? Дәл осындай жағдайларға арналған — for циклі: қайталану саны АЛДЫН АЛА белгілі болғанда қолданылатын, Python-дың ЕҢ ЖИІ қолданылатын цикл операторы.
Өткен сабақта білдік: while — «қашан тоқтау керегі» белгілі болғанда. Ал for — «НЕШЕ РЕТ қайталау керегі» алдын ала белгілі болғанда. Футбол алаңын екі рет айналып жүгіру, 842 басқыштан өту, 1-ден 100-ге дейінгі сандарды қосу — бәрінде «неше рет» деген сан алдын ала белгілі.
Программалаудағы циклдер дәл осы белгіге қарай екіге бөлінеді: арифметикалық цикл (for) — саны белгілі, қадамдық цикл (while) — саны белгісіз.
for <цикл параметрі> in <range() функциясы>: цикл денесі
For-дың «жанары» — range() функциясы: ол саған қайталану ретін «ұсынады». Үш жазылу тәсілі бар:
| Жазылуы | Мағынасы | Мысал |
|---|---|---|
| range(n) | 0-ден n−1-ге дейін | range(6) → 0,1,2,3,4,5 |
| range(k, n) | k-дан n−1-ге дейін | range(6,11) → 6,7,8,9,10 |
| range(k, n, x) | k-дан n−1-ге дейін x қадаммен | range(1,11,2) → 1,3,5,7,9 |
АЛТЫН ЕРЕЖЕ: range-тің соңғы саны НӘТИЖЕГЕ ЕШҚАШАН КІРМЕЙДІ. Бұл — Python-ды үйренушілердің ЕҢ ЖИІ шатасатын жері!
for i in range(20): print(i, end=' ')Жауабы: 0 1 2 ... 18 19 (20 КІРМЕЙДІ). end=' ' — жаңа жолға көшпей, бос орынмен бөлу.
for i in range(20, 0, -1): print(i, end=' ')Жауабы: 20 19 18 ... 2 1. Қадам ТЕРІС болғанда, санауыш КЕМИДІ; 0 КІРМЕЙДІ.
n = int(input("Enter n= ")) sum = 0 for i in range(1, n+1): sum += i print(sum)Неге n+1? n-ді ДЕ қосындыға қосу керек, ал range(1,n)-де n КІРМЕЙДІ! Тексеру: n=5 → 1+2+3+4+5 = 15.
Енді ЕҢ КҮШТІ құралға көшейік: for циклінің ІШІНДЕ тағы бір for циклі.
Кірістірілген циклдер — бір цикл екіншісінің ІШІНЕ орналастырылған жағдай: сыртқы циклдің бір қадамы аяқталғанда ғана келесі сыртқы қадам басталады, ал әр сыртқы қадамда ішкі цикл ТОЛЫҚ орындалады.
n = 3 for x in range(1, n+1): for y in range(1, n+1): print(y, 'x', x, '=', y*x)Логикасы: сыртқы x=1 болғанда ІШКІ y толық жүреді (1,2,3). Сосын сыртқы x=2 болады, ІШКІ y тағы толық жүреді. Барлығы 9 рет.
for i in range(1, 6): for j in range(1, 6): print(i*j, end="\t") print()Түсіндірме: ішкі print — табуляциямен бір жолда; СЫРТҚЫ print() (жақшасы бос!) — әр сыртқы қадамнан кейін ЖАҢА ЖОЛҒА көшу үшін.
Маңызды практикалық сұрақ: неге циклдерді шексіз кірістіре беруге БОЛМАЙДЫ? Бір қарапайым цикл n рет жұмыс істейді. Екі кірістірілген цикл — n² рет. Үш кірістірілген цикл — n³ рет!
Санмен көрейік: n=100 болса, 3 кірістірілген цикл 100³ = 1 000 000 рет — жылдам. Бірақ n=1000 болса — 1000³ = 1 000 000 000 (МИЛЛИАРД) рет! Компьютердің 1 миллион операцияға ≈1 секунд кетсе, миллиард операцияға ≈1000 секунд, яғни ШАМАМЕН 17 МИНУТ кетеді.
N = int(input('Оқушы саны =')) z = 0 for i in range(1, N+1): x = int(input(str(i)+'-оқушының бойы=')) if x < 140: z += 1 print('Бойы аласа оқушылар саны =', z)Мысал: N=6, бойлар: 145, 137, 139, 150, 141, 138. 140-тан кішілер: 137, 139, 138 → z = 3.
- For — қайталану саны АЛДЫН АЛА белгілі болғандағы цикл: for i in range(...): денесі.
- range(n) — 0-ден; range(k,n) — k-дан; range(k,n,x) — қадаммен; ЕШҚАШАН соңғы мән кірмейді.
- Кірістірілген for циклдер екі өлшемді есептерге қолданылады (көбейту кестесі), бірақ жұмыс уақыты n^деңгей санына тәуелді өседі.
- For + if қосындысы — санауыш есептерінің негізі.