9-bo‘lim

Shart operatorlari

Dasturga qaror qabul qilishni o'rgatish: if, elif, else, ichma-ich shartlar, ternar operator va match-case konstruksiyasi.

🕑 13 daqiqa o‘qish 📄 457 so‘z 👁 7 marta ko‘rilgan
Ushbu bo‘lim mundarijasi
  1. if - eng oddiy shart
  2. if ... else
  3. if ... elif ... else
  4. Shart yozishda ishlatiladigan konstruksiyalar
  5. Ichma-ich shartlar
  6. Erta qaytish uslubi
  7. Ternar operator (bir satrli shart)
  8. match ... case (Python 3.10+)
  9. Qiymatlarni mantiqiy tekshirish
  10. pass - bo'sh blok
  11. Amaliy misol: soliq kalkulyatori
  12. Xulosa

Shu paytgacha yozgan dasturlarimiz har doim bir xil ishlagan. Endi ularga qaror qabul qilishni o'rgatamiz: "agar bunday bo'lsa - buni qil, aks holda - boshqasini".

if - eng oddiy shart #

Python
yosh = 20

if yosh >= 18:
    print("Siz voyaga yetgansiz")
    print("Ovoz berishingiz mumkin")

print("Dastur tugadi")
Natija
Siz voyaga yetgansiz
Ovoz berishingiz mumkin
Dastur tugadi

Tuzilishi juda sodda:

Python
if shart:
    # shart True bo'lsa bajariladi
    amal()
Ikki nuqta va chekinish

Ikki nuqta (:) va undan keyingi satrning chekinishi majburiy. Bularsiz SyntaxError yoki IndentationError chiqadi.

if ... else #

Python
harorat = 12

if harorat > 20:
    print("Ob-havo issiq, yengil kiyining")
else:
    print("Sovuq, kurtka kiying")
Natija
Sovuq, kurtka kiying

if ... elif ... else #

Uchdan ortiq variant bo'lganda elif (else if) ishlatiladi:

Python
baho = 87

if baho >= 90:
    natija = "A'lo"
elif baho >= 80:
    natija = "Yaxshi"
elif baho >= 70:
    natija = "Qoniqarli"
elif baho >= 60:
    natija = "Qoniqarsiz"
else:
    natija = "Yomon"

print(f"Baho: {baho} -> {natija}")
Natija
Baho: 87 -> Yaxshi
Boshlanish baho ≥ 90 ? ha "A'lo" yo'q baho ≥ 80 ? ha "Yaxshi" yo'q else: "Qoniqarli"
Shartlar yuqoridan pastga tekshiriladi, birinchi mos kelgani bajariladi
Tartib muhim!
Python
baho = 95

if baho >= 60:
    print("Qoniqarsiz")     # BU BAJARILADI
elif baho >= 90:
    print("A'lo")           # bu hech qachon bajarilmaydi

Python birinchi mos kelgan shartda to'xtaydi. Shuning uchun shartlarni eng qattiqdan eng yumshoqqa qarab yozing.

Shart yozishda ishlatiladigan konstruksiyalar #

KonstruksiyaQachon ishlatiladiMisol
ifBitta shartif yosh >= 18:
if / elseIkkita variantha yoki yo'q
if / elif / elseUchdan ortiq variantbaho darajalari
TernarBir satrli tanlov"ha" if shart else "yo'q"
match / caseAniq qiymatlar bo'yichabuyruq nomi, kun nomi
and / orBir nechta shartni birlashtirishyosh >= 18 and guvohnoma

Ichma-ich shartlar #

Python
yosh = 25
guvohnoma_bor = True
staj_yil = 3

if yosh >= 18:
    if guvohnoma_bor:
        if staj_yil >= 2:
            print("Mashina ijaraga olishingiz mumkin")
        else:
            print("Stajingiz yetarli emas (kamida 2 yil)")
    else:
        print("Haydovchilik guvohnomasi kerak")
else:
    print("Yoshingiz yetarli emas")
Natija
Mashina ijaraga olishingiz mumkin
Chuqur ichma-ichlikdan qoching

Yuqoridagi kodni and bilan ancha soddalashtirish mumkin:

Python
if yosh >= 18 and guvohnoma_bor and staj_yil >= 2:
    print("Mashina ijaraga olishingiz mumkin")
else:
    print("Shartlarga javob bermaysiz")

Uch darajadan chuqur ichma-ichlik - kodni qayta ko'rib chiqish kerakligining belgisi.

Erta qaytish uslubi #

Professional kodda ko'pincha "qo'riqchi shartlar" (guard clauses) ishlatiladi:

Python
def buyurtmani_tekshir(summa, balans, faolmi):
    """Buyurtmani qabul qilish mumkinligini tekshiradi."""
    if not faolmi:
        return "Hisobingiz bloklangan"
    if summa <= 0:
        return "Summa noto'g'ri"
    if summa > balans:
        return "Mablag' yetarli emas"
    return "Buyurtma qabul qilindi"


print(buyurtmani_tekshir(50000, 200000, True))
print(buyurtmani_tekshir(500000, 200000, True))
print(buyurtmani_tekshir(50000, 200000, False))
Natija
Buyurtma qabul qilindi
Mablag' yetarli emas
Hisobingiz bloklangan

Ternar operator (bir satrli shart) #

Python
yosh = 20

# Uzun yozuv
if yosh >= 18:
    holat = "Kattalar"
else:
    holat = "Bolalar"

# Qisqa yozuv
holat = "Kattalar" if yosh >= 18 else "Bolalar"
print(holat)

# Amalda ko'p ishlatiladi
baholar = [85, 45, 92]
for baho in baholar:
    print(f"{baho}: {'o‘tdi' if baho >= 60 else 'o‘tmadi'}")
Natija
Kattalar
85: o'tdi
45: o'tmadi
92: o'tdi

match ... case (Python 3.10+) #

Ko'p variantli tanlov uchun zamonaviy usul:

Python
buyruq = "saqlash"

match buyruq:
    case "ochish":
        print("Fayl ochilmoqda...")
    case "saqlash":
        print("Fayl saqlanmoqda...")
    case "ochirish":
        print("Fayl o'chirilmoqda...")
    case _:
        print("Noma'lum buyruq")
Natija
Fayl saqlanmoqda...

case _ - bu "boshqa barcha holatlar", ya'ni else ning analogi.

Python
# Bir nechta qiymatni birlashtirish
kun = "shanba"

match kun:
    case "shanba" | "yakshanba":
        print("Dam olish kuni")
    case "juma":
        print("Qisqartirilgan ish kuni")
    case _:
        print("Ish kuni")
Natija
Dam olish kuni
match yoki if?

match faqat Python 3.10 va undan yuqori versiyalarda ishlaydi. Agar kodingiz eski versiyalarda ham ishlashi kerak bo'lsa yoki shartlar murakkab bo'lsa - if/elif ishlating. match aniq qiymatlarni solishtirishda o'qishga qulayroq.

Qiymatlarni mantiqiy tekshirish #

Python
ism = input("Ismingiz: ")

# Uzun yozuv
if len(ism) > 0:
    print(f"Salom, {ism}")

# Pythonchasiga
if ism:
    print(f"Salom, {ism}")
else:
    print("Ism kiritilmadi")

# Ro'yxat uchun ham xuddi shunday
xaridlar = []
if not xaridlar:
    print("Savatingiz bo'sh")
Natija
Ismingiz: 
Ism kiritilmadi
Savatingiz bo'sh

pass - bo'sh blok #

Ba'zan blokni keyinroq to'ldirmoqchi bo'lasiz, lekin Python bo'sh blokni qabul qilmaydi:

Python
yosh = 20

if yosh >= 18:
    pass        # keyinroq yozamiz
else:
    print("Ruxsat yo'q")

Amaliy misol: soliq kalkulyatori #

Python
# ============================================
# Progressiv daromad solig'i kalkulyatori
# ============================================

BHM = 375_000        # bazaviy hisoblash miqdori (shartli qiymat)

oylik_daromad = float(input("Oylik daromadingiz (so'm): "))

if oylik_daromad <= 0:
    print("Daromad musbat son bo'lishi kerak.")
elif oylik_daromad <= BHM:
    soliq_foizi = 0
    izoh = "Soliqdan ozod"
elif oylik_daromad <= BHM * 5:
    soliq_foizi = 7
    izoh = "Birinchi bosqich"
elif oylik_daromad <= BHM * 10:
    soliq_foizi = 12
    izoh = "Ikkinchi bosqich"
else:
    soliq_foizi = 17
    izoh = "Uchinchi bosqich"

if oylik_daromad > 0:
    soliq = oylik_daromad * soliq_foizi / 100
    sof_daromad = oylik_daromad - soliq

    print()
    print("=" * 42)
    print(f"{'SOLIQ HISOB-KITOBI':^42}")
    print("=" * 42)
    print(f"{'Yalpi daromad:':<26}{oylik_daromad:>15,.0f}")
    print(f"{'Soliq bosqichi:':<26}{izoh:>15}")
    print(f"{'Soliq stavkasi:':<26}{soliq_foizi:>14} %")
    print("-" * 42)
    print(f"{'Soliq summasi:':<26}{soliq:>15,.0f}")
    print(f"{'Qolgan sof daromad:':<26}{sof_daromad:>15,.0f}")
    print("=" * 42)

    if soliq_foizi >= 12:
        print("\nEslatma: yuqori bosqichdasiz, soliq imtiyozlarini tekshiring.")
Natija
Oylik daromadingiz (so'm): 3000000

==========================================
            SOLIQ HISOB-KITOBI            
==========================================
Yalpi daromad:                   3,000,000
Soliq bosqichi:            Ikkinchi bosqich
Soliq stavkasi:                        12 %
------------------------------------------
Soliq summasi:                     360,000
Qolgan sof daromad:              2,640,000
==========================================

Eslatma: yuqori bosqichdasiz, soliq imtiyozlarini tekshiring.
Amaliy topshiriq

bilet_narxi.py dasturini yozing. Kino chiptasi narxi quyidagicha aniqlansin:

  1. Yosh 6 dan kichik - bepul.
  2. 6-17 yosh - 25 000 so'm.
  3. 18-59 yosh - 45 000 so'm.
  4. 60 va undan katta - 20 000 so'm.
  5. Qo'shimcha: agar kun "seshanba" bo'lsa, narxdan 30% chegirma qilinsin (if va *= bilan).
  6. Yakuniy natijani f-satr bilan chiroyli chiqaring.

Xulosa #

  • if, elif, else - dasturning qaror qabul qilish mexanizmi.
  • Shartlar yuqoridan pastga tekshiriladi, birinchi mos kelgani bajariladi.
  • Chuqur ichma-ichlik o'rniga and/or yoki erta qaytish uslubidan foydalaning.
  • qiymat_1 if shart else qiymat_2 - bir satrli shart.
  • Python 3.10 dan boshlab match ... case mavjud.

Keyingi bo'limda takrorlanuvchi amallarni - sikllarni o'rganamiz.

Xatolik topdingizmi?

Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.