for sikli va range()
Bu bobda
- bir ishni ko'p marta takrorlashni:
for range()ning uch shaklini- satrning har bir harfi bo'ylab yurishni
- yig'indi, ko'paytma va sanoq (accumulator) andozalarini
- ichma-ich sikl bilan jadval chiqarishni
Nega sikl kerak?
1 dan 5 gacha sonlarni chiqarish kerak bo'lsin. Siklsiz:
print(1) print(2) print(3) print(4) print(5)
1 2 3 4 5
1 dan 1000 gacha bo'lsa-chi? 1000 qator yozmaymiz. Sikl (loop) bir xil ishni kerakli marta takrorlaydi:
for i in range(1, 6): print(i)
1 2 3 4 5
Uni shunday o'qing: "1 dan 6 gacha (6 kirmaydi) har bir i uchun — i ni chiqar". Har bir aylanishda i navbatdagi qiymatni oladi: 1, 2, 3, 4, 5.
Tuzilishi if ga o'xshaydi: oxirida :, takrorlanadigan qatorlar 4 probel ichkarida.
range(): sonlar ketma-ketligi
range() ning uch shakli bor:
for i in range(5): print(i, end=" ") print() for i in range(2, 8): print(i, end=" ") print() for i in range(0, 21, 5): print(i, end=" ") print() for i in range(10, 0, -2): print(i, end=" ")
0 1 2 3 4 2 3 4 5 6 7 0 5 10 15 20 10 8 6 4 2
| Shakli | Ma'nosi | Natija |
|---|---|---|
range(5) |
0 dan 5 gacha | 0 1 2 3 4 |
range(2, 8) |
2 dan 8 gacha | 2 3 4 5 6 7 |
range(0, 21, 5) |
5 qadam bilan | 0 5 10 15 20 |
range(10, 0, -2) |
teskari, 2 qadam bilan | 10 8 6 4 2 |
Qoida kesish (slicing) bilan bir xil: oxiri kirmaydi. range(5) — aynan 5 ta son.
print(..., end=" ") sonlarni bitta qatorga yozadi, bo'sh print() esa yangi qatorga o'tkazadi.
Bitta kam (off-by-one)
1 dan n gacha kerak bo'lsa, range(1, n + 1) yozing:
n = 5 for i in range(1, n): print(i, end=" ") print("<- 5 yo'q!") for i in range(1, n + 1): print(i, end=" ")
1 2 3 4 <- 5 yo'q! 1 2 3 4 5
Bu dasturchilar orasidagi eng mashhur xato, uning nomi ham bor: off-by-one error.
Agar takrorlash sonining o'zi kerak bo'lmasa, o'zgaruvchi o'rniga _ yoziladi:
for _ in range(3): print("Salom!")
Salom! Salom! Salom!
Satr bo'ylab yurish
for satrning har bir belgisini navbat bilan oladi:
for harf in "Python": print(harf)
P y t h o n
Satrdagi unli harflarni sanaymiz:
gap = "Men dasturlashni o'rganyapman" unlilar = 0 for harf in gap.lower(): if harf in "aeiou": unlilar += 1 print("Unli harflar soni:", unlilar)
Unli harflar soni: 9
Bu yerda if sikl ichida, shuning uchun 8 probel ichkarida.
Yig'indi: accumulator andozasi
Sikl bilan eng ko'p qilinadigan ish — yig'ish. Andoza uch qadamdan iborat:
- Sikldan oldin natija o'zgaruvchisini boshlang'ich qiymat bilan oching:
jami = 0. - Sikl ichida uni yangilang:
jami += i. - Sikldan keyin natijani chiqaring.
jami = 0 for i in range(1, 101): jami += i print("1 dan 100 gacha yig'indi:", jami)
1 dan 100 gacha yig'indi: 5050
Gauss va 5050
Aytishlaricha, kichkina Gaussga o'qituvchi 1 dan 100 gacha qo'shishni topshirgan. U bir zumda javob bergan: (1 + 100) · 100 / 2 = 5050. Kompyuter esa 100 marta qo'shadi — lekin buni millisekundlarda qiladi va formula bilmasa ham bo'ladi.
Ko'paytma uchun boshlang'ich qiymat 1 bo'ladi (0 ga ko'paytirsak, hammasi 0 bo'lib qoladi):
n = 5 faktorial = 1 for i in range(1, n + 1): faktorial *= i print(f"{n}! = {faktorial}")
5! = 120
print ni sikl ichiga qo'yib qo'yish
jami = 0 for i in range(1, 5): jami += i print("Yig'indi:", jami)
Yig'indi: 1 Yig'indi: 3 Yig'indi: 6 Yig'indi: 10
print ichkarida bo'lgani uchun har aylanishda chiqdi. Faqat oxirgi natija kerak bo'lsa, print ni sikldan tashqariga (chekinishsiz) chiqaring. Ba'zan esa bu aynan kerak: oraliq natijalarni kuzatish uchun.
Foydalanuvchidan N ta son olish
Sikl ichida input() ham bo'lishi mumkin:
n = int(input("Nechta son? ")) jami = 0 eng_katta = None for i in range(n): x = int(input(f"{i + 1}-son: ")) jami += x if eng_katta is None or x > eng_katta: eng_katta = x print("Yig'indi:", jami) print("O'rtacha:", jami / n) print("Eng kattasi:", eng_katta)
Nechta son? 4 1-son: 12 2-son: 7 3-son: 20 4-son: 5 Yig'indi: 44 O'rtacha: 11.0 Eng kattasi: 20
None — "hali qiymat yo'q" degan maxsus qiymat. Birinchi son kelganda u darhol eng_katta ga yoziladi. is None bilan tekshiriladi.
Ichma-ich sikl
Sikl ichida yana sikl bo'lishi mumkin. Ichki sikl tashqi siklning har bir aylanishida boshidan oxirigacha yuradi:
for i in range(1, 6): for j in range(1, 6): print(f"{i * j:4}", end="") print()
1 2 3 4 5 2 4 6 8 10 3 6 9 12 15 4 8 12 16 20 5 10 15 20 25
{i * j:4} — har bir sonni 4 belgi joyda o'ngga tekislab chiqaradi (5-bob), shuning uchun ustunlar tekis.
Yulduzchalar bilan uchburchak:
for i in range(1, 6): print("*" * i)
* ** *** **** *****
Bu yerda ichki sikl kerak bo'lmadi: "*" * i satrni takrorlaydi (2-bob).
break va continue
break— siklni darhol to'xtatadi.continue— joriy aylanishning qolganini tashlab, keyingisiga o'tadi.
for i in range(1, 11): if i % 3 == 0: continue if i > 8: break print(i, end=" ")
1 2 4 5 7 8
3 ga bo'linadiganlar (3, 6) continue bilan o'tkazib yuborildi, 9 da break siklni to'xtatdi. Ularni 8-bobda while bilan ko'p ishlatamiz.
Kitoblarda
- Python asoslari: sikllar 61-bet,
forsikli 62–65-betlar,range()66-bet. - Python Crash Course: 4-bob, Looping Through an Entire List 49–53-betlar, Using the range() Function 57–58-betlar. Kitobda
fordarhol ro'yxat bilan o'rgatiladi; biz ro'yxatlarni 9-bobda o'rganamiz va o'shanda bu misollarga qaytamiz.
Xulosa
for i in range(a, b, qadam):—adanbgacha,bkirmaydi.- 1 dan n gacha —
range(1, n + 1). for harf in satr:— har bir belgi bo'ylab.- Yig'indi:
jami = 0→jami += x; ko'paytma:p = 1→p *= x; sanoq:soni += 1. - Natijani chiqaradigan
printsikldan keyin, chekinishsiz. break— to'xtatish,continue— keyingisiga o'tish.
Mashqlar
Bir nechta son chiqarish kerak bo'lsa, ularni probel bilan bitta qatorga yoki har birini alohida qatorga chiqarishingiz mumkin — tekshiruvchi uchun farqi yo'q.
Butun sonlar K va N berilgan (N > 0). K sonini N marta chiqaring.
| Kirish | Kutilgan natija |
|---|---|
| 7, 3 | 7 7 7 |
| 0, 1 | 0 |
| -2, 4 | -2 -2 -2 -2 |
Yechimni ko'rish
k = int(input()) n = int(input()) for _ in range(n): print(k, end=" ")
Butun sonlar A va B berilgan (A < B). A dan B gacha (ikkalasi ham kiradi) barcha butun sonlarni o'sish tartibida chiqaring, oxirida esa ularning soni N ni chiqaring.
| Kirish | Kutilgan natija |
|---|---|
| 3, 7 | 3 4 5 6 7 5 |
| -1, 1 | -1 0 1 3 |
| 10, 11 | 10 11 2 |
Yechimni ko'rish
a = int(input()) b = int(input()) for i in range(a, b + 1): print(i, end=" ") print(b - a + 1)
Butun sonlar A va B berilgan (A < B). A va B orasidagi (ularning o'zi kirmaydi) barcha butun sonlarni kamayish tartibida chiqaring, oxirida ularning soni N ni chiqaring.
| Kirish | Kutilgan natija |
|---|---|
| 3, 7 | 6 5 4 3 |
| -1, 2 | 1 0 2 |
| 5, 6 | 0 |
Yechimni ko'rish
a = int(input()) b = int(input()) for i in range(b - 1, a, -1): print(i, end=" ") print(b - a - 1)
1 kg konfet narxi berilgan. 1, 2, ..., 10 kg konfet narxini chiqaring.
| Kirish | Kutilgan natija |
|---|---|
| 1000 | 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000 |
| 2.5 | 2.5 5 7.5 10 12.5 15 17.5 20 22.5 25 |
Yechimni ko'rish
narx = float(input()) for kg in range(1, 11): print(narx * kg, end=" ")
Butun sonlar A va B berilgan (A < B). A dan B gacha (ikkalasi ham kiradi) barcha butun sonlar yig'indisini toping.
| Kirish | Kutilgan natija |
|---|---|
| 1, 100 | 5050 |
| 3, 5 | 12 |
| -2, 2 | 0 |
Yechimni ko'rish
a = int(input()) b = int(input()) s = 0 for i in range(a, b + 1): s += i print(s)
Butun sonlar A va B berilgan (A < B). A dan B gacha barcha butun sonlar ko'paytmasini toping.
| Kirish | Kutilgan natija |
|---|---|
| 1, 5 | 120 |
| 3, 5 | 60 |
| -2, -1 | 2 |
Yechimni ko'rish
a = int(input()) b = int(input()) p = 1 for i in range(a, b + 1): p *= i print(p)
Butun sonlar A va B berilgan (A < B). A dan B gacha barcha butun sonlar kvadratlari yig'indisini toping.
| Kirish | Kutilgan natija |
|---|---|
| 1, 3 | 14 |
| 2, 4 | 29 |
| -1, 1 | 2 |
Yechimni ko'rish
a = int(input()) b = int(input()) s = 0 for i in range(a, b + 1): s += i * i print(s)
Butun son N berilgan (N > 0). Yig'indini toping: 1 + 1/2 + 1/3 + ... + 1/N.
| Kirish | Kutilgan natija |
|---|---|
| 1 | 1 |
| 2 | 1.5 |
| 4 | 2.083333333333333 |
Yechimni ko'rish
n = int(input()) s = 0 for i in range(1, n + 1): s += 1 / i print(s)
Butun son N berilgan (N > 0). Yig'indini toping: N² + (N+1)² + ... + (2N)².
| Kirish | Kutilgan natija |
|---|---|
| 1 | 5 |
| 2 | 29 |
| 3 | 86 |
Yechimni ko'rish
n = int(input()) s = 0 for i in range(n, 2 * n + 1): s += i * i print(s)
Haqiqiy son A va butun son N berilgan (N > 0). Aᴺ ni sikl bilan, ** ishlatmasdan toping.
| Kirish | Kutilgan natija |
|---|---|
| 2, 10 | 1024 |
| 1.5, 2 | 2.25 |
| -3, 3 | -27 |
Yechimni ko'rish
a = float(input()) n = int(input()) p = 1 for _ in range(n): p *= a print(p)
Butun son N berilgan (N > 0). N! ni toping: 1·2·...·N.
| Kirish | Kutilgan natija |
|---|---|
| 1 | 1 |
| 5 | 120 |
| 10 | 3628800 |
Yechimni ko'rish
n = int(input()) f = 1 for i in range(1, n + 1): f *= i print(f)
Butun son N berilgan (N > 0). Yig'indini bitta sikl bilan toping: 1! + 2! + ... + N!. Maslahat: har bir faktorialni oldingisidan bitta ko'paytirish bilan olasiz.
| Kirish | Kutilgan natija |
|---|---|
| 1 | 1 |
| 3 | 9 |
| 5 | 153 |
Yechimni ko'rish
n = int(input()) f = 1 s = 0 for i in range(1, n + 1): f *= i s += f print(s)
So'z berilgan. Undagi unli harflar (a e i o u, kichik yoki katta) sonini chiqaring.
| Kirish | Kutilgan natija |
|---|---|
| Samarqand | 3 |
| PYTHON | 1 |
| Toshkent | 2 |
Yechimni ko'rish
s = input() k = 0 for h in s.lower(): if h in "aeiou": k += 1 print(k)
Butun son N berilgan. N ning ko'paytirish jadvalini chiqaring: N x 1 = ... dan N x 10 = ... gacha, har biri alohida qatorda.
| Kirish | Kutilgan natija |
|---|---|
| 7 | 7 x 1 = 7 7 x 2 = 14 7 x 3 = 21 7 x 4 = 28 7 x 5 = 35 7 x 6 = 42 7 x 7 = 49 7 x 8 = 56 7 x 9 = 63 7 x 10 = 70 |
| 3 | 3 x 1 = 3 3 x 2 = 6 3 x 3 = 9 3 x 4 = 12 3 x 5 = 15 3 x 6 = 18 3 x 7 = 21 3 x 8 = 24 3 x 9 = 27 3 x 10 = 30 |
Yechimni ko'rish
n = int(input()) for i in range(1, 11): print(f"{n} x {i} = {n * i}")
Butun son N berilgan. 1 dan N gacha bo'lgan sonlardan 3 ga yoki 5 ga bo'linadiganlarining yig'indisini toping.
| Kirish | Kutilgan natija |
|---|---|
| 10 | 33 |
| 15 | 60 |
| 1 | 0 |
Yechimni ko'rish
n = int(input()) s = 0 for i in range(1, n + 1): if i % 3 == 0 or i % 5 == 0: s += i print(s)
Bu bobni bepul o'qidingiz.
Kitob o'rgatadi, lekin sizning kodingiz nega ishlamaganini ayta olmaydi. Kursda uy vazifangiz tekshiriladi.