5. Sikllar¶
Dasturlashda bir xil amalni bir necha marta bajarish juda ko‘p uchraydi.
Masalan, 1 dan 10 gacha bo‘lgan sonlarni chiqarish:
print(1)
print(2)
print(3)
print(4)
print(5)
Bunday kodni takrorlab yozish o‘rniga sikllardan foydalanamiz.
Python'da asosiy sikllar:
for
while
Siklni boshqarish uchun esa:
break
continue
kabi operatorlar ishlatiladi.
for sikli¶
for biror kolleksiyadagi elementlarni ketma-ket ko‘rib chiqish uchun ishlatiladi.
mevalar = [
"olma",
"banan",
"anor"
]
for meva in mevalar:
print(
meva
)
Natija:
olma
banan
anor
Bu yerda meva har bir iteratsiyada navbatdagi element qiymatini oladi.
for bilan list¶
ismlar = [
"Softromeda",
"Ali",
"Vali"
]
for ism in ismlar:
print(
f"Salom, {ism}!"
)
Natija:
Salom, Softromeda!
Salom, Ali!
Salom, Vali!
for bilan tuple¶
for tuple bilan ham ishlaydi:
ranglar = (
"qizil",
"yashil",
"ko‘k"
)
for rang in ranglar:
print(
rang
)
for bilan set¶
mevalar = {
"olma",
"banan",
"anor"
}
for meva in mevalar:
print(
meva
)
Set tartibni kafolatlamagani sababli chiqish tartibi oldindan aniq bo‘lmasligi mumkin.
for bilan string¶
String ham belgilar ketma-ketligi sifatida ko‘riladi.
ism = "Softromeda"
for belgi in ism:
print(
belgi
)
Natija:
S
o
f
t
r
o
m
e
d
a
range()¶
Sonlar oralig‘i bilan ishlash uchun range() juda muhim.
for son in range(5):
print(
son
)
Natija:
0
1
2
3
4
range(5) 0 dan boshlanadi va 5 ni o‘z ichiga olmaydi.
range() boshlanish va tugash qiymati¶
for son in range(1, 6):
print(
son
)
Natija:
1
2
3
4
5
Bu yerda:
1 → boshlanish
6 → chegaradan keyingi qiymat
range() qadam bilan¶
Uchinchi argument qadamni bildiradi:
for son in range(0, 11, 2):
print(
son
)
Natija:
0
2
4
6
8
10
Teskari range()¶
Manfiy qadam yordamida kamayib borish mumkin:
for son in range(10, 0, -1):
print(
son
)
Natija:
10
9
8
7
6
5
4
3
2
1
range() yordamida hisoblash¶
yigindi = 0
for son in range(1, 6):
yigindi += son
print(
f"Yig‘indi: {yigindi}"
)
Natija:
Yig‘indi: 15
Sikl ichidagi o‘zgaruvchi¶
for son in range(1, 4):
kvadrat = son ** 2
print(
f"{son} ning kvadrati: {kvadrat}"
)
Natija:
1 ning kvadrati: 1
2 ning kvadrati: 4
3 ning kvadrati: 9
enumerate()¶
Listdagi element bilan birga uning indeksini olish uchun enumerate() ishlatiladi.
mevalar = [
"olma",
"banan",
"anor"
]
for indeks, meva in enumerate(mevalar):
print(
f"{indeks}: {meva}"
)
Natija:
0: olma
1: banan
2: anor
enumerate()ni 1 dan boshlash¶
mevalar = [
"olma",
"banan",
"anor"
]
for tartib, meva in enumerate(
mevalar,
start=1
):
print(
f"{tartib}. {meva}"
)
Natija:
1. olma
2. banan
3. anor
while¶
while berilgan shart True bo‘lib turgan paytda ishlaydi.
son = 1
while son <= 5:
print(
son
)
son += 1
Natija:
1
2
3
4
5
Bu yerda har bir iteratsiyadan keyin son oshiriladi.
while siklining tuzilishi¶
Umumiy ko‘rinishi:
while shart:
bajariladigan_kod
Masalan:
hisoblagich = 0
while hisoblagich < 3:
print(
"Salom, Softromeda!"
)
hisoblagich += 1
Natija:
Salom, Softromeda!
Salom, Softromeda!
Salom, Softromeda!
Cheksiz sikl¶
Agar while sharti hech qachon False bo‘lmasa, cheksiz sikl hosil bo‘ladi.
Masalan:
son = 1
while son <= 5:
print(
son
)
Bu kodda son hech qachon o‘zgarmaydi.
Shuning uchun shart doimo:
son <= 5
bo‘lib qoladi.
while bilan ishlaganda siklning qachon tugashini nazorat qilish muhim.
break¶
break siklni darhol to‘xtatadi.
for son in range(1, 11):
if son == 5:
break
print(
son
)
Natija:
1
2
3
4
son 5 ga yetganda sikl to‘xtaydi.
while bilan break¶
son = 1
while True:
print(
son
)
if son == 5:
break
son += 1
Natija:
1
2
3
4
5
Bu yerda while True cheksiz sikl yaratadi, break esa kerakli vaqtda uni to‘xtatadi.
continue¶
continue joriy iteratsiyani to‘xtatib, keyingi iteratsiyaga o‘tadi.
for son in range(1, 6):
if son == 3:
continue
print(
son
)
Natija:
1
2
4
5
3 soni o'tkazib yuborildi.
Juft sonlarni chiqarish¶
for son in range(1, 11):
if son % 2 != 0:
continue
print(
son
)
Natija:
2
4
6
8
10
break va continue farqi¶
break
→ butun siklni to‘xtatadi.
continue
→ faqat joriy iteratsiyani o‘tkazib yuboradi.
Masalan:
for son in range(1, 6):
if son == 3:
continue
print(
son
)
Natija:
1
2
4
5
Lekin:
for son in range(1, 6):
if son == 3:
break
print(
son
)
Natija:
1
2
Ichma-ich sikllar¶
Bir sikl ichida boshqa sikl bo‘lishi mumkin.
for birinchi_son in range(1, 4):
for ikkinchi_son in range(1, 4):
print(
birinchi_son,
ikkinchi_son
)
Natija:
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3
Ko‘paytirish jadvali¶
Ichma-ich sikllardan foydalanib ko‘paytirish jadvalini yaratish mumkin:
for birinchi_son in range(1, 4):
for ikkinchi_son in range(1, 4):
natija = (
birinchi_son
* ikkinchi_son
)
print(
f"{birinchi_son} x {ikkinchi_son} = {natija}"
)
Natija:
1 x 1 = 1
1 x 2 = 2
1 x 3 = 3
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
3 x 1 = 3
3 x 2 = 6
3 x 3 = 9
Dictionary bilan sikl¶
Dictionary kalitlari bo‘yicha aylanish:
foydalanuvchi = {
"ism": "Softromeda",
"yosh": 25,
"kasb": "Dasturchi"
}
for kalit in foydalanuvchi:
print(
kalit
)
Dictionary qiymatlari¶
for qiymat in foydalanuvchi.values():
print(
qiymat
)
Dictionary kalit va qiymatlari¶
items() bilan:
for kalit, qiymat in foydalanuvchi.items():
print(
f"{kalit}: {qiymat}"
)
Natija:
ism: Softromeda
yosh: 25
kasb: Dasturchi
List ichidagi dictionary¶
Amaliy dasturlarda list ichidagi dictionary juda ko‘p ishlatiladi.
foydalanuvchilar = [
{
"ism": "Softromeda",
"yosh": 25
},
{
"ism": "Ali",
"yosh": 30
},
{
"ism": "Vali",
"yosh": 28
}
]
for foydalanuvchi in foydalanuvchilar:
print(
f"{foydalanuvchi['ism']} - "
f"{foydalanuvchi['yosh']} yosh"
)
Natija:
Softromeda - 25 yosh
Ali - 30 yosh
Vali - 28 yosh
else va sikllar¶
Python'da for va while bilan else ishlatilishi mumkin.
else sikl break orqali to‘xtatilmaganida bajariladi.
for son in range(1, 6):
print(
son
)
else:
print(
"Sikl tugadi."
)
Natija:
1
2
3
4
5
Sikl tugadi.
break bilan sikl else¶
for son in range(1, 6):
if son == 3:
break
else:
print(
"Son topilmadi."
)
Bu yerda break ishlatilgani uchun else bajarilmaydi.
Qidiruv algoritmi¶
Sikllarning eng foydali vazifalaridan biri ma’lumot qidirishdir.
mevalar = [
"olma",
"banan",
"anor",
"uzum"
]
qidirilayotgan_meva = "anor"
for meva in mevalar:
if meva == qidirilayotgan_meva:
print(
"Meva topildi."
)
break
Qidiruv natijasini aniqlash¶
mevalar = [
"olma",
"banan",
"anor",
"uzum"
]
qidirilayotgan_meva = "shaftoli"
topildi = False
for meva in mevalar:
if meva == qidirilayotgan_meva:
topildi = True
break
if topildi:
print(
"Meva topildi."
)
else:
print(
"Meva topilmadi."
)
Natija:
Meva topilmadi.
Eng katta sonni topish¶
Listdagi eng katta sonni sikl yordamida topish mumkin:
sonlar = [
15,
42,
8,
31,
27
]
eng_katta_son = sonlar[0]
for son in sonlar:
if son > eng_katta_son:
eng_katta_son = son
print(
f"Eng katta son: {eng_katta_son}"
)
Natija:
Eng katta son: 42
Yig‘indi hisoblash¶
sonlar = [
10,
20,
30,
40
]
yigindi = 0
for son in sonlar:
yigindi += son
print(
f"Yig‘indi: {yigindi}"
)
Natija:
Yig‘indi: 100
Juft sonlarni yig‘ish¶
sonlar = [
10,
15,
20,
25,
30
]
yigindi = 0
for son in sonlar:
if son % 2 == 0:
yigindi += son
print(
f"Juft sonlar yig‘indisi: {yigindi}"
)
Natija:
Juft sonlar yig‘indisi: 60
while bilan foydalanuvchi kiritishini boshqarish¶
Foydalanuvchi to‘g‘ri qiymat kiritmaguncha so‘rash mumkin:
while True:
parol = input(
"Parolni kiriting: "
)
if parol == "Softromeda":
print(
"Parol to‘g‘ri."
)
break
print(
"Parol noto‘g‘ri. Qayta urinib ko‘ring."
)
Urinishlar sonini cheklash¶
togri_parol = "Softromeda"
urinishlar = 3
while urinishlar > 0:
parol = input(
"Parolni kiriting: "
)
if parol == togri_parol:
print(
"Tizimga kirish muvaffaqiyatli."
)
break
urinishlar -= 1
print(
f"Qolgan urinishlar: {urinishlar}"
)
else:
print(
"Urinishlar tugadi."
)
Amaliy mashqlar¶
Mashq 1¶
for yordamida 1 dan 10 gacha bo‘lgan sonlarni chiqaring.
Mashq 2¶
1 dan 100 gacha bo‘lgan juft sonlarni chiqaring.
Mashq 3¶
1 dan 100 gacha bo‘lgan toq sonlarni chiqaring.
Mashq 4¶
1 dan 100 gacha bo‘lgan sonlar yig‘indisini hisoblang.
Mashq 5¶
Listdagi eng katta sonni toping.
Mashq 6¶
Listdagi eng kichik sonni toping.
Mashq 7¶
Listdagi juft sonlar sonini hisoblang.
Mashq 8¶
Listdagi ma’lum elementni qidiring va topilganda break ishlating.
Mashq 9¶
continue yordamida 1 dan 20 gacha bo‘lgan sonlardan 3 ga bo‘linadiganlarini o‘tkazib yuboring.
Mashq 10¶
while yordamida 10 dan 1 gacha teskari sanang.
Mini loyiha — Softromeda sonlar tahlili¶
Foydalanuvchidan bir nechta son qabul qilib, ularni tahlil qiladigan dastur yozamiz.
sonlar = []
for tartib in range(5):
son = int(
input(
f"{tartib + 1}-sonni kiriting: "
)
)
sonlar.append(
son
)
yigindi = 0
juft_sonlar_soni = 0
toq_sonlar_soni = 0
for son in sonlar:
yigindi += son
if son % 2 == 0:
juft_sonlar_soni += 1
else:
toq_sonlar_soni += 1
print(
"\n=== Softromeda natijalari ==="
)
print(
f"Sonlar: {sonlar}"
)
print(
f"Yig‘indi: {yigindi}"
)
print(
f"Juft sonlar soni: {juft_sonlar_soni}"
)
print(
f"Toq sonlar soni: {toq_sonlar_soni}"
)
Bu loyiha quyidagi tushunchalarni birlashtiradi:
list
for
range()
input()
int()
append()
if
else
%
+=
Bob xulosasi¶
Bu bobda takrorlanuvchi kodlarni boshqarish uchun sikllarni o‘rgandik.
Asosiy mavzular:
for
while
range()
enumerate()
break
continue
Shuningdek:
List bilan sikl
Tuple bilan sikl
Set bilan sikl
Dictionary bilan sikl
Ichma-ich sikllar
Sikl bilan qidirish
Sikl bilan yig‘indi hisoblash
Sikl bilan ma’lumotlarni tahlil qilish
for odatda mavjud kolleksiya yoki ma’lum sonli takrorlash bilan ishlashda qulay:
for son in range(1, 6):
print(
son
)
while esa shart bajarilib turgan vaqt davomida takrorlash uchun qulay:
son = 1
while son <= 5:
print(
son
)
son += 1
Keyingi bobda funksiyalar yordamida kodni qayta ishlatiladigan va tartibli qismlarga ajratishni o‘rganamiz.