Asosiy qismga o'tish

for sikli va range()

7-bob 29 kod bloki 2453 so'z

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:

python5 qator
print(1)
print(2)
print(3)
print(4)
print(5)
Natija
1
2
3
4
5

1 dan 1000 gacha bo'lsa-chi? 1000 qator yozmaymiz. Sikl (loop) bir xil ishni kerakli marta takrorlaydi:

python2 qator
for i in range(1, 6):
    print(i)
Natija
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:

python11 qator
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=" ")
Natija
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:

python6 qator
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=" ")
Natija
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:

python2 qator
for _ in range(3):
    print("Salom!")
Natija
Salom!
Salom!
Salom!

Satr bo'ylab yurish

for satrning har bir belgisini navbat bilan oladi:

python2 qator
for harf in "Python":
    print(harf)
Natija
P
y
t
h
o
n

Satrdagi unli harflarni sanaymiz:

python6 qator
gap = "Men dasturlashni o'rganyapman"
unlilar = 0
for harf in gap.lower():
    if harf in "aeiou":
        unlilar += 1
print("Unli harflar soni:", unlilar)
Natija
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:

  1. Sikldan oldin natija o'zgaruvchisini boshlang'ich qiymat bilan oching: jami = 0.
  2. Sikl ichida uni yangilang: jami += i.
  3. Sikldan keyin natijani chiqaring.
python4 qator
jami = 0
for i in range(1, 101):
    jami += i
print("1 dan 100 gacha yig'indi:", jami)
Natija
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):

python5 qator
n = 5
faktorial = 1
for i in range(1, n + 1):
    faktorial *= i
print(f"{n}! = {faktorial}")
Natija
5! = 120

print ni sikl ichiga qo'yib qo'yish

python4 qator
jami = 0
for i in range(1, 5):
    jami += i
    print("Yig'indi:", jami)
Natija
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:

python11 qator
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)
Natija
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:

python4 qator
for i in range(1, 6):
    for j in range(1, 6):
        print(f"{i * j:4}", end="")
    print()
Natija
   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:

python2 qator
for i in range(1, 6):
    print("*" * i)
Natija
*
**
***
****
*****

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.
python6 qator
for i in range(1, 11):
    if i % 3 == 0:
        continue
    if i > 8:
        break
    print(i, end=" ")
Natija
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, for sikli 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 for darhol 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): — a dan b gacha, b kirmaydi.
  • 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 print sikldan 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.

For1

Butun sonlar K va N berilgan (N > 0). K sonini N marta chiqaring.

KirishKutilgan natija
7, 37 7 7
0, 10
-2, 4-2 -2 -2 -2
Yechimni ko'rish
python4 qator
k = int(input())
n = int(input())
for _ in range(n):
    print(k, end=" ")
For2

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.

KirishKutilgan natija
3, 73 4 5 6 7 5
-1, 1-1 0 1 3
10, 1110 11 2
Yechimni ko'rish
python5 qator
a = int(input())
b = int(input())
for i in range(a, b + 1):
    print(i, end=" ")
print(b - a + 1)
For3

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.

KirishKutilgan natija
3, 76 5 4 3
-1, 21 0 2
5, 60
Yechimni ko'rish
python5 qator
a = int(input())
b = int(input())
for i in range(b - 1, a, -1):
    print(i, end=" ")
print(b - a - 1)
For4

1 kg konfet narxi berilgan. 1, 2, ..., 10 kg konfet narxini chiqaring.

KirishKutilgan natija
10001000 2000 3000 4000 5000 6000 7000 8000 9000 10000
2.52.5 5 7.5 10 12.5 15 17.5 20 22.5 25
Yechimni ko'rish
python3 qator
narx = float(input())
for kg in range(1, 11):
    print(narx * kg, end=" ")
For7

Butun sonlar A va B berilgan (A < B). A dan B gacha (ikkalasi ham kiradi) barcha butun sonlar yig'indisini toping.

KirishKutilgan natija
1, 1005050
3, 512
-2, 20
Yechimni ko'rish
python6 qator
a = int(input())
b = int(input())
s = 0
for i in range(a, b + 1):
    s += i
print(s)
For8

Butun sonlar A va B berilgan (A < B). A dan B gacha barcha butun sonlar ko'paytmasini toping.

KirishKutilgan natija
1, 5120
3, 560
-2, -12
Yechimni ko'rish
python6 qator
a = int(input())
b = int(input())
p = 1
for i in range(a, b + 1):
    p *= i
print(p)
For9

Butun sonlar A va B berilgan (A < B). A dan B gacha barcha butun sonlar kvadratlari yig'indisini toping.

KirishKutilgan natija
1, 314
2, 429
-1, 12
Yechimni ko'rish
python6 qator
a = int(input())
b = int(input())
s = 0
for i in range(a, b + 1):
    s += i * i
print(s)
For10

Butun son N berilgan (N > 0). Yig'indini toping: 1 + 1/2 + 1/3 + ... + 1/N.

KirishKutilgan natija
11
21.5
42.083333333333333
Yechimni ko'rish
python5 qator
n = int(input())
s = 0
for i in range(1, n + 1):
    s += 1 / i
print(s)
For11

Butun son N berilgan (N > 0). Yig'indini toping: N² + (N+1)² + ... + (2N)².

KirishKutilgan natija
15
229
386
Yechimni ko'rish
python5 qator
n = int(input())
s = 0
for i in range(n, 2 * n + 1):
    s += i * i
print(s)
For15

Haqiqiy son A va butun son N berilgan (N > 0). Aᴺ ni sikl bilan, ** ishlatmasdan toping.

KirishKutilgan natija
2, 101024
1.5, 22.25
-3, 3-27
Yechimni ko'rish
python6 qator
a = float(input())
n = int(input())
p = 1
for _ in range(n):
    p *= a
print(p)
For19

Butun son N berilgan (N > 0). N! ni toping: 1·2·...·N.

KirishKutilgan natija
11
5120
103628800
Yechimni ko'rish
python5 qator
n = int(input())
f = 1
for i in range(1, n + 1):
    f *= i
print(f)
For20

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.

KirishKutilgan natija
11
39
5153
Yechimni ko'rish
python7 qator
n = int(input())
f = 1
s = 0
for i in range(1, n + 1):
    f *= i
    s += f
print(s)
7.1

So'z berilgan. Undagi unli harflar (a e i o u, kichik yoki katta) sonini chiqaring.

KirishKutilgan natija
Samarqand3
PYTHON1
Toshkent2
Yechimni ko'rish
python6 qator
s = input()
k = 0
for h in s.lower():
    if h in "aeiou":
        k += 1
print(k)
7.2

Butun son N berilgan. N ning ko'paytirish jadvalini chiqaring: N x 1 = ... dan N x 10 = ... gacha, har biri alohida qatorda.

KirishKutilgan natija
77 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
33 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
python3 qator
n = int(input())
for i in range(1, 11):
    print(f"{n} x {i} = {n * i}")
7.3

Butun son N berilgan. 1 dan N gacha bo'lgan sonlardan 3 ga yoki 5 ga bo'linadiganlarining yig'indisini toping.

KirishKutilgan natija
1033
1560
10
Yechimni ko'rish
python6 qator
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.

Telegramda yozish Narxlar