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.