9-bo‘lim
Shart operatorlari
Dasturga qaror qabul qilishni o'rgatish: if, elif, else, ichma-ich shartlar, ternar operator va match-case konstruksiyasi.
Ushbu bo‘lim mundarijasi
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 #
yosh = 20
if yosh >= 18:
print("Siz voyaga yetgansiz")
print("Ovoz berishingiz mumkin")
print("Dastur tugadi")
Siz voyaga yetgansiz
Ovoz berishingiz mumkin
Dastur tugadi
Tuzilishi juda sodda:
if shart:
# shart True bo'lsa bajariladi
amal()
Ikki nuqta (:) va undan keyingi satrning chekinishi majburiy. Bularsiz SyntaxError yoki IndentationError chiqadi.
if ... else #
harorat = 12
if harorat > 20:
print("Ob-havo issiq, yengil kiyining")
else:
print("Sovuq, kurtka kiying")
Sovuq, kurtka kiying
if ... elif ... else #
Uchdan ortiq variant bo'lganda elif (else if) ishlatiladi:
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}")
Baho: 87 -> Yaxshi
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 #
| Konstruksiya | Qachon ishlatiladi | Misol |
|---|---|---|
if | Bitta shart | if yosh >= 18: |
if / else | Ikkita variant | ha yoki yo'q |
if / elif / else | Uchdan ortiq variant | baho darajalari |
| Ternar | Bir satrli tanlov | "ha" if shart else "yo'q" |
match / case | Aniq qiymatlar bo'yicha | buyruq nomi, kun nomi |
and / or | Bir nechta shartni birlashtirish | yosh >= 18 and guvohnoma |
Ichma-ich shartlar #
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")
Mashina ijaraga olishingiz mumkin
Yuqoridagi kodni and bilan ancha soddalashtirish mumkin:
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:
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))
Buyurtma qabul qilindi
Mablag' yetarli emas
Hisobingiz bloklangan
Ternar operator (bir satrli shart) #
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'}")
Kattalar
85: o'tdi
45: o'tmadi
92: o'tdi
match ... case (Python 3.10+) #
Ko'p variantli tanlov uchun zamonaviy usul:
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")
Fayl saqlanmoqda...
case _ - bu "boshqa barcha holatlar", ya'ni else ning analogi.
# 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")
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 #
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")
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:
yosh = 20
if yosh >= 18:
pass # keyinroq yozamiz
else:
print("Ruxsat yo'q")
Amaliy misol: soliq kalkulyatori #
# ============================================
# 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.")
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.
bilet_narxi.py dasturini yozing. Kino chiptasi narxi quyidagicha aniqlansin:
- Yosh 6 dan kichik - bepul.
- 6-17 yosh - 25 000 so'm.
- 18-59 yosh - 45 000 so'm.
- 60 va undan katta - 20 000 so'm.
- Qo'shimcha: agar kun "seshanba" bo'lsa, narxdan 30% chegirma qilinsin (
ifva*=bilan). - 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/oryoki erta qaytish uslubidan foydalaning. qiymat_1 if shart else qiymat_2- bir satrli shart.- Python 3.10 dan boshlab
match ... casemavjud.
Keyingi bo'limda takrorlanuvchi amallarni - sikllarni o'rganamiz.
O‘qish tarixini saqlamoqchimisiz?
Tizimga kirsangiz, tugatgan bo‘limlaringiz saqlanadi va qoldirgan joyingizdan davom etasiz.
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.