for sikli — range(), enumerate(), zip(), break, continue
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 shaklrange(n)— n marta takrorlashenumerate()— indeks + element;zip()— parallel ro'yxatlarbreak— siklni to'xtatadi;continue— joriy iteratsiyani o'tkazadifor/else—breakbo'lmasaelseishlaydi
Keyingi dars
8-dars: while sikli — qachon for emas, cheksiz loop, break, else