while sikli — qachon for emas, cheksiz loop, break, else

~15 daq · Python · Kirish va Asoslar

Muammodan boshlaylik

Tasavvur qiling: ATM da parol kiritilmoqda. To'g'ri parol kiritilgunga qadar so'raydi. Necha marta so'raydi? Bilmaymiz — 1 martami, 3 martami, 10 martami? for sikli ma'lum miqdorda ishlaydi. Bu holatda esa miqdor oldindan noma'lum.

while — aynan shu holatlar uchun.


while sikli

while — shart True bo'lgan vaqt davom etadi:

son = 1

while son <= 5:
    print(son)
    son += 1
1
2
3
4
5

Qanday ishlaydi:

  1. Shart tekshiriladi: son <= 5 — True?
  2. Ha — blok bajariladi
  3. Yana 1-qadamga qaytadi
  4. Shart False bo'lguncha davom etadi

for vs while — qachon qaysi?

Bu savol muhim — to'g'ri tanlov kodni oson qiladi:

Holat Tanlov
Necha marta — ma'lum for
To'plam ustida ishlash for
Shart bajarilgunga qadar while
Foydalanuvchi kiritishini kutish while
# for — 10 marta, aniq
for i in range(10):
    print(i)

# while — to'g'ri son kiritilgunga qadar
son = int(input("1-10 oralig'ida son: "))
while son < 1 or son > 10:
    print("Xato! Qaytadan kiriting.")
    son = int(input("Son: "))

Cheksiz loop va break

while True — ataylab cheksiz. break bilan kerak bo'lganda to'xtatiladi:

while True:
    parol = input("Parolni kiriting: ")
    if parol == "1234":
        print("Xush kelibsiz!")
        break
    print("Noto'g'ri parol.")

Bu pattern foydalanuvchi kiritishida keng ishlatiladi. Nima uchun while True va break — while parol != "1234" emas? Chunki birinchi marta kiritishdan oldin parol o'zgaruvchisi yo'q. while True bilan bu muammoni aylanib o'tamiz.

Urinishlar sonini cheklash:

MAX = 3
urinish = 0

while True:
    parol = input("Parol: ")
    urinish += 1

    if parol == "1234":
        print("Kirdi!")
        break

    if urinish >= MAX:
        print("Hisob bloklandi.")
        break

    print(f"Noto'g'ri. Qoldi: {MAX - urinish} ta urinish.")

continue — while da

son = 0

while son < 10:
    son += 1
    if son % 2 == 0:
        continue   # juft sonni o'tkazib yubor
    print(son)     # faqat toqlar: 1, 3, 5, 7, 9

while / else

break bilan tugamagan bo'lsa — else ishlaydi:

urinish = 0

while urinish < 3:
    taxmin = int(input("1-10 oralig'ida taxmin: "))
    urinish += 1

    if taxmin == 7:
        print(f"To'g'ri! {urinish} urinishda topdingiz.")
        break
else:
    print("3 urinish tugadi. Javob: 7")

Amaliy misol — o'yin

import random

sir = random.randint(1, 100)
urinish = 0

print("Men 1-100 oralig'ida son o'yladim. Toping!")

while True:
    taxmin = int(input("Taxminingiz: "))
    urinish += 1

    if taxmin < sir:
        print("Kattaroq!")
    elif taxmin > sir:
        print("Kichikroq!")
    else:
        print(f"Barakalla! {urinish} urinishda topdingiz.")
        break

Tez-tez uchraydigan xatolar

Cheksiz loop — shart hech o'zgarmaydi:

son = 1
while son <= 5:
    print(son)
    # ❌ son += 1 unutildi — doim 1 chiqadi, to'xtamaydi

Agar dastur to'xtamasa — Ctrl+C bilan to'xtatiladi.

Boshdanoq shart False bo'lishi:

son = 10
while son < 5:   # ← 10 < 5 — False, bir martaham bajarilmaydi
    print(son)
    son -= 1

Agar blok hech bajarilmayotgan bo'lsa — shartni tekshiring.

break ni unutish — cheksiz loop:

while True:
    parol = input("Parol: ")
    if parol == "1234":
        print("Kirdi!")
        # ❌ break yo'q — "Kirdi!" chiqadi lekin to'xtamaydi

Xulosa

while — shart True bo'lgan vaqt ishlaydi. Necha marta — oldindan noma'lum.

Eslab qoling:

  • while shart: — shart False bo'lguncha
  • while True: ... break — cheksiz loop, kerak bo'lganda to'xtatiladi
  • continue — joriy iteratsiyani o'tkazadi
  • while/else — break bo'lmasa else ishlaydi
  • Shart har iteratsiyada o'zgarishiga ishonch hosil qiling

Keyingi dars

9-dars: String — slicing, metodlar, immutability