for sikli — range(), enumerate(), zip(), break, continue

~20 daq · Python · Kirish va Asoslar

Muammodan boshlaylik

Siz maktab uchun dastur yozyapsiz. 30 ta o'quvchining baholarini chiqarish kerak. Har birini qo'lda yozish — 30 marta bir xil kod. Ertaga 31-o'quvchi qo'shilsa — yana o'zgartirish.

Dasturlashda bir xil narsani takrorlamaslik asosiy qoidalardan biri. Takrorlanuvchi amallar uchun — sikllar.


for sikli

for — to'plamdagi har bir element ustida ketma-ket ishlaydi:

o_quvchilar = ["Jasur", "Malika", "Bobur", "Zulfiya"]

for ism in o_quvchilar:
    print(f"Salom, {ism}!")
Salom, Jasur!
Salom, Malika!
Salom, Bobur!
Salom, Zulfiya!

ism — vaqtinchalik o'zgaruvchi. Har iteratsiyada keyingi elementni oladi. Nomi istalgancha — lekin ma'noli bo'lsin.


range() — sonlar ketma-ketligi

Aniq necha marta takrorlash uchun:

for i in range(5):     # 0 dan 4 gacha — 5 ta son
    print(i)
# 0, 1, 2, 3, 4

for i in range(1, 6):  # 1 dan 5 gacha
    print(i)
# 1, 2, 3, 4, 5

for i in range(0, 10, 2):  # 0 dan 10 gacha, 2 qadam
    print(i)
# 0, 2, 4, 6, 8

range(boshlanish, tugash, qadam) — tugash qiymati kirmaydi.

Teskari yo'nalish:

for i in range(5, 0, -1):
    print(i)
# 5, 4, 3, 2, 1

enumerate() — indeks bilan birga

Ko'pincha elementning o'zi ham, raqami ham kerak. Ko'pchilik buni noqulay usulda yozadi:

# ❌ Noqulay
for i in range(len(o_quvchilar)):
    print(i, o_quvchilar[i])

Python da buning uchun enumerate() bor:

# ✅ Pythonic — o'qish oson
for i, ism in enumerate(o_quvchilar):
    print(i, ism)
# 0 Jasur
# 1 Malika
# 2 Bobur

# 1 dan boshlash:
for i, ism in enumerate(o_quvchilar, start=1):
    print(f"{i}. {ism}")
# 1. Jasur
# 2. Malika
# 3. Bobur

zip() — bir vaqtda bir nechta ro'yxat

Ikki ro'yxatni parallel ko'rib chiqish:

ismlar = ["Jasur", "Malika", "Bobur"]
ballar = [88, 95, 72]

for ism, ball in zip(ismlar, ballar):
    print(f"{ism}: {ball} ball")

# Jasur: 88 ball
# Malika: 95 ball
# Bobur: 72 ball

zip() eng qisqa ro'yxat tugaganda to'xtaydi.


break — siklni to'xtatish

Qidiruv algoritmlarida: topildi — to'xtat:

talabalar = ["Jasur", "Malika", "Bobur", "Zulfiya"]
qidirish = "Bobur"

for ism in talabalar:
    if ism == qidirish:
        print(f"{qidirish} topildi!")
        break   # ← keyingi elementlarga qaramasdan chiqadi

continue — joriy iteratsiyani o'tkazish

break siklni to'xtatadi. continue — faqat joriy iteratsiyani o'tkazib, davom etadi:

sonlar = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

print("Faqat juft sonlar:")
for son in sonlar:
    if son % 2 != 0:   # toq bo'lsa
        continue        # bu iteratsiyani o'tkazib yubor
    print(son)
# 2, 4, 6, 8, 10

for / else — kam ishlatiladigan, lekin foydali

else bloki sikl normal tugaganda (ya'ni break bilan emas) ishlaydi:

talabalar = ["Jasur", "Malika", "Bobur"]
qidirish = "Ali"

for ism in talabalar:
    if ism == qidirish:
        print("Topildi!")
        break
else:
    print(f"{qidirish} ro'yxatda yo'q")   # break bo'lmadi — shu ishlaydi

# Ali ro'yxatda yo'q

String ustida for

Matn ham to'plam — har bir belgi ustida ishlash mumkin:

for harf in "Python":
    print(harf)
# P, y, t, h, o, n

Amaliy misol

talabalar = [
    {"ism": "Jasur",  "ball": 88},
    {"ism": "Malika", "ball": 95},
    {"ism": "Bobur",  "ball": 72},
    {"ism": "Zulfiya","ball": 91},
]

print("Natijalar:")
for i, t in enumerate(talabalar, 1):
    baho = "A'lo" if t["ball"] >= 90 else "Yaxshi" if t["ball"] >= 75 else "Qoniqarli"
    print(f"  {i}. {t['ism']:10} — {t['ball']} ball ({baho})")

# Eng yuqori ball
eng_yaxshi = max(talabalar, key=lambda t: t["ball"])
print(f"\nReyting boshlig'i: {eng_yaxshi['ism']} ({eng_yaxshi['ball']} ball)")

Tez-tez uchraydigan xatolar

range() da tugash qiymati kirmasligini unutish:

for i in range(10):
    print(i)   # 0 dan 9 — 10 chiqmaydi!

# 1 dan 10 gacha (10 ham kiradi):
for i in range(1, 11):
    print(i)

Sikl ichida ro'yxatni o'zgartirish:

sonlar = [1, 2, 3, 4, 5]

# ❌ Xavfli — iteratsiya paytida o'zgartirish
for son in sonlar:
    if son % 2 == 0:
        sonlar.remove(son)   # ba'zi elementlar o'tkazib yuboriladi

# ✅ Yangi ro'yxat yarat
toqlar = [son for son in sonlar if son % 2 != 0]

enumerate o'rniga range(len(...)) ishlatish:

# ❌ Noqulay
for i in range(len(o_quvchilar)):
    print(i, o_quvchilar[i])

# ✅
for i, talaba in enumerate(o_quvchilar):
    print(i, talaba)

Xulosa

for — Python da eng ko'p ishlatiladigan sikl.

Eslab qoling:

  • for x in iterable: — asosiy shakl
  • range(n) — n marta takrorlash
  • enumerate() — indeks + element; zip() — parallel ro'yxatlar
  • break — siklni to'xtatadi; continue — joriy iteratsiyani o'tkazadi
  • for/else — break bo'lmasa else ishlaydi

Keyingi dars

8-dars: while sikli — qachon for emas, cheksiz loop, break, else