for sikli va range()

while sikli shart bajarilguncha aylanadi. Lekin ko'pincha biz aniq bilamiz: «har bir harf uchun», «1 dan 10 gacha har bir son uchun», «ro'yxatdagi har bir o'quvchi uchun». Bunday hollarda for sikli ancha qulay.

Bu darsda

  • for sikli bilan satr bo'ylab yurish
  • range() — sonlar ketma-ketligini yaratish
  • for bilan yig'indi va hisoblash
  • Ichma-ich sikllar
  • for va while dan qaysi birini tanlash

for — «har biri uchun»

for sikli ketma-ketlikning har bir elementi uchun blokni bir marta bajaradi. Eng oddiy ketma-ketlik — satr: u harflardan iborat.

for harf in "Salom":
    print(harf)
S
a
l
o
m

Buni shunday o'qing: «"Salom" dagi har bir harf uchun: harfni chiqar». Har bir iteratsiyada harf o'zgaruvchisi navbatdagi belgini oladi: avval "S", keyin "a" va hokazo. Elementlar tugashi bilan sikl o'zi to'xtaydi — hisoblagichni oshirish ham, shartni tekshirish ham shart emas.

Umumiy ko'rinishi:

for element in ketma_ketlik:
    # har bir element uchun bajariladigan kod

for va in — kalit so'zlar, o'zgaruvchi nomini esa o'zingiz tanlaysiz. Uni ma'noli qo'ying: harf, son, talaba.

range() — sonlar ketma-ketligi

Biror ishni aniq son marta takrorlash yoki sonlar bo'ylab yurish uchun range() funksiyasi ishlatiladi:

for i in range(5):
    print("Takrorlash", i)
Takrorlash 0
Takrorlash 1
Takrorlash 2
Takrorlash 3
Takrorlash 4

range(5) — 0 dan boshlab 5 ta son: 0, 1, 2, 3, 4. Diqqat: 5 ning o'zi kirmaydi — xuddi kesmalardagidek (6-dars).

range() ga bitta, ikkita yoki uchta son berish mumkin:

YozuvMa'nosiSonlar
range(5)0 dan 5 gacha (5 kirmaydi)0, 1, 2, 3, 4
range(1, 6)1 dan 6 gacha (6 kirmaydi)1, 2, 3, 4, 5
range(0, 20, 5)0 dan 20 gacha, 5 qadam bilan0, 5, 10, 15
range(10, 0, -2)10 dan 0 gacha, 2 tadan kamayib10, 8, 6, 4, 2
for son in range(1, 6):
    print(son, end=" ")
print()

for son in range(0, 20, 5):
    print(son, end=" ")
print()

for son in range(10, 0, -2):
    print(son, end=" ")
1 2 3 4 5
0 5 10 15
10 8 6 4 2

Qoida: range(boshi, oxiri) da oxiri hech qachon kirmaydi. 1 dan 10 gacha (10 ham kirsin) kerak bo'lsa — range(1, 11) yozing.

for bilan hisob-kitob

O'tgan darsda 1 dan 100 gacha sonlar yig'indisini while bilan topgandik. for bilan bu ancha qisqa:

yigindi = 0
for son in range(1, 101):
    yigindi += son
print(yigindi)

Hisoblagichni yaratish ham, oshirish ham kerak emas — range() hammasini o'zi qiladi.

Ko'paytirish jadvali

son = 9
for i in range(1, 11):
    print(f"{son} x {i} = {son * i}")

son ni o'zgartirib, istalgan sonning ko'paytirish jadvalini oling.

Belgilarni sanash

for va if birgalikda juda ko'p ishlatiladi. Masalan, matndagi unli harflarni sanaymiz:

matn = "Python dasturlash tili"
unlilar = 0
for harf in matn.lower():
    if harf in "aeiou":
        unlilar += 1
print("Unli harflar soni:", unlilar)
Unli harflar soni: 6

Ichma-ich sikllar

Sikl ichida boshqa sikl bo'lishi mumkin. Bunda tashqi siklning har bir iteratsiyasi uchun ichki sikl to'liq bajariladi:

for qator in range(1, 4):
    for ustun in range(1, 4):
        print(qator * ustun, end="\t")
    print()
1	2	3
2	4	6
3	6	9

Tashqi sikl 3 marta aylandi, har safar ichki sikl ham 3 marta — jami 9 ta ko'paytma. Ichki sikldan keyingi bo'sh print() yangi qatorga o'tkazadi.

Naqshlar chizish

Satrni songa ko'paytirishni (6-dars) eslasak, ba'zan ichki siklsiz ham ishni bajarish mumkin:

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

break va continue for'da ham ishlaydi

# 7 ga bo'linadigan birinchi ikki xonali sonni topamiz
for son in range(10, 100):
    if son % 7 == 0:
        print("Topildi:", son)
        break

O'zgaruvchi kerak bo'lmasa

Ba'zan sikl o'zgaruvchisi kerak emas — ishni shunchaki N marta takrorlash kerak. Bunday hollarda o'zgaruvchi nomi o'rniga pastki chiziq _ yoziladi:

for _ in range(3):
    print("Hip-hip, hurra!")

for yoki while?

for ni tanlang, agar...while ni tanlang, agar...
takrorlashlar soni oldindan ma'lumtakrorlashlar soni noma'lum
ketma-ketlik (satr, ro'yxat, range) bo'ylab yurish kerakbiror shart bajarilguncha kutish kerak
«har bir harf uchun», «1 dan 10 gacha»«to'g'ri parol kiritilguncha», «pul tugaguncha»

Amalda for ancha ko'p ishlatiladi: u qisqaroq va cheksiz sikl xavfi deyarli yo'q.

Mashqlar

1-mashq Kvadratlar yig'indisi

1 dan 10 gacha sonlar kvadratlarining yig'indisini toping: 1² + 2² + ... + 10².

yigindi = 0
Yechimni ko'rish
yigindi = 0
for son in range(1, 11):
    yigindi += son ** 2
print(yigindi)

2-mashq 7 ning jadvali

7 ning ko'paytirish jadvalini 7 x 1 = 7 dan 7 x 10 = 70 gacha chiqaring.

# Kodingizni shu yerga yozing
Yechimni ko'rish
for i in range(1, 11):
    print(f"7 x {i} = {7 * i}")

3-mashq Unlilarni sanang

Matndagi unli harflar (a, e, i, o, u) sonini toping. Katta harflar ham hisobga olinsin.

matn = "Assalomu alaykum"
Yechimni ko'rish
matn = "Assalomu alaykum"
soni = 0
for harf in matn.lower():
    if harf in "aeiou":
        soni += 1
print(soni)

4-mashq Teskari uchburchak

Quyidagi naqshni chiqaring:

*****
****
***
**
*
# Kodingizni shu yerga yozing
Ishora

range(5, 0, -1) sizga 5, 4, 3, 2, 1 sonlarini beradi.

Yechimni ko'rish
for i in range(5, 0, -1):
    print("*" * i)

5-mashq «Uch-Besh» o'yini

Bu dasturchilarning mashhur mashqi (inglizcha FizzBuzz). 1 dan 15 gacha sonlarni chiqaring, lekin: 3 ga bo'linadigan son o'rniga Uch, 5 ga bo'linadigan son o'rniga Besh, ham 3 ga, ham 5 ga bo'linadigan son o'rniga UchBesh deb yozing.

for son in range(1, 16):
    print(son)
Ishora

Shartlar tartibi muhim: «ham 3 ga, ham 5 ga» shartini birinchi tekshiring. Aks holda 15 uchun «Uch» chiqib qoladi.

Yechimni ko'rish
for son in range(1, 16):
    if son % 3 == 0 and son % 5 == 0:
        print("UchBesh")
    elif son % 3 == 0:
        print("Uch")
    elif son % 5 == 0:
        print("Besh")
    else:
        print(son)

O'zingizni sinang

range(1, 5) qaysi sonlarni beradi?

  1. 1, 2, 3, 4, 5
  2. 1, 2, 3, 4
  3. 0, 1, 2, 3, 4
  4. 2, 3, 4, 5

To'g'ri. Oxirgi son (5) kirmaydi.

Quyidagi kod necha marta «Ha» chiqaradi?

for i in range(3):
    for j in range(4):
        print("Ha")
  1. 7
  2. 4
  3. 12
  4. 3

To'g'ri. Tashqi siklning har bir (3 ta) iteratsiyasida ichki sikl 4 marta ishlaydi: 3 × 4 = 12.

range(10, 0, -3) qaysi sonlarni beradi?

  1. 10, 7, 4, 1, -2
  2. 10, 7, 4
  3. 0, 3, 6, 9
  4. 10, 7, 4, 1

To'g'ri. 10 dan boshlab 3 tadan kamayadi; 0 ga yetmasdan to'xtaydi.

Foydalanuvchi «chiqish» deb yozguncha savol berish kerak. Qaysi sikl qulayroq?

  1. while
  2. for va range()
  3. Ikkalasi ham to'g'ri kelmaydi
  4. Sikl kerak emas

To'g'ri. Takrorlashlar soni noma'lum — bunday holat uchun while mos.

Xulosa

  • for element in ketma_ketlik: — har bir element uchun blokni bajaradi.
  • range(n) — 0 dan n gacha; range(a, b) — a dan b gacha; range(a, b, qadam) — qadam bilan. Oxirgi son kirmaydi.
  • Ichma-ich sikllarda ichki sikl tashqi siklning har bir iteratsiyasida to'liq bajariladi.
  • break va continue for da ham ishlaydi.
  • Takrorlash soni ma'lum bo'lsa — for, noma'lum bo'lsa — while.