Shartlar: if, elif, else

Endi dasturimiz savol bera oladi. Navbat — javobga qarab turlicha harakat qilishga. Bu darsda dasturga qaror qabul qilishni o'rgatamiz — bu algoritmning ikkinchi «g'ishti», ya'ni tanlash.

Bu darsda

  • if — agar shart bajarilsa
  • else — aks holda
  • elif — bir nechta variantdan birini tanlash
  • Chekinish (bo'sh joylar) qoidasi va kod bloklari
  • Ichma-ich shartlar va ko'p uchraydigan xatolar

if — «agar»

if (inglizcha «agar») kalit so'zidan keyin shart yoziladi. Shart True bo'lsa, uning ostidagi kod bajariladi, False bo'lsa — tashlab o'tiladi:

harorat = 35

if harorat > 30:
    print("Bugun juda issiq!")
    print("Ko'proq suv iching.")

print("Ob-havo ma'lumoti tugadi.")
Bugun juda issiq!
Ko'proq suv iching.
Ob-havo ma'lumoti tugadi.

harorat ni 20 ga o'zgartirib, yana ishga tushiring. Endi faqat oxirgi qator chiqadi, chunki shart bajarilmadi.

Bu kodda ikkita muhim narsa bor:

  1. Shartdan keyin ikki nuqta : qo'yiladi.
  2. Shart bajarilganda ishlaydigan qatorlar 4 ta bo'sh joy ichkariga surilgan.

Chekinish — Python'ning eng muhim qoidasi

Qator boshidagi bo'sh joylar chekinish (inglizcha indentation) deyiladi. Ko'p tillarda u faqat chiroy uchun, Python'da esa majburiy: aynan chekinish qaysi qatorlar if ga tegishli ekanini ko'rsatadi.

Bir xil chekinishdagi ketma-ket qatorlar blok hosil qiladi. Yuqoridagi misolda ikkita print() — if bloki. Oxirgi print() esa chekinishsiz, demak u if ga tegishli emas va har doim bajariladi.

Kitobdagi mundarijani eslang: bo'lim nomi chapda, uning ichidagi mavzular esa biroz o'ngga surilgan. Surilgan qatorlar yuqoridagi bo'limga tegishli ekani darhol ko'rinadi. Python kodi ham xuddi shunday «o'qiladi».

Har doim 4 ta bo'sh joy ishlating. Bu saytdagi muharrir, IDLE va VS Code'da Tab tugmasi aynan 4 ta bo'sh joy qo'yadi, Enter esa ikki nuqtadan keyin chekinishni o'zi qo'shadi.

else — «aks holda»

Shart bajarilmaganda boshqa ish qilish kerak bo'lsa, else ishlatiladi. U if bilan bir xil chekinishda yoziladi va undan keyin ham ikki nuqta qo'yiladi:

son = int(input("Son kiriting: "))

if son % 2 == 0:
    print(son, "— juft son")
else:
    print(son, "— toq son")
Son kiriting: 7
7 — toq son

Bu yerda ikki yo'ldan faqat bittasi bajariladi: yo if bloki, yo else bloki. Ikkalasi birga hech qachon ishlamaydi.

elif — bir nechta variant

Ba'zan ikki emas, ko'proq variant bo'ladi. Buning uchun elif (else if — «aks holda, agar») ishlatiladi. Masalan, 100 ballik tizimda baho qo'yish:

BallBaho
86 – 1005 (a'lo)
71 – 854 (yaxshi)
56 – 703 (qoniqarli)
0 – 552 (qoniqarsiz)
ball = int(input("Ballingiz: "))

if ball >= 86:
    print("Baho: 5 (a'lo)")
elif ball >= 71:
    print("Baho: 4 (yaxshi)")
elif ball >= 56:
    print("Baho: 3 (qoniqarli)")
else:
    print("Baho: 2 (qoniqarsiz)")
Ballingiz: 78
Baho: 4 (yaxshi)

Python shartlarni yuqoridan pastga tekshiradi va birinchi rost shartning blokini bajaradi. Qolganlari tekshirilmaydi ham. 78 ball uchun: 78 >= 86? Yo'q. 78 >= 71? Ha — «4 (yaxshi)» chiqadi va shu bilan tamom.

Shuning uchun ikkinchi shartda ball >= 71 and ball <= 85 deb yozish shart emas: agar ball 85 dan katta bo'lganida, birinchi shart allaqachon ishlagan bo'lardi.

Tartib muhim! Shartlarni teskari yozsak, nima bo'lishini o'ylab ko'ring:

ball = 95

if ball >= 56:
    print("Baho: 3")
elif ball >= 86:
    print("Baho: 5")

95 ball uchun «3» chiqdi, chunki birinchi shart (95 >= 56) allaqachon rost. Katta qiymatlarni tekshiradigan shartlar oldin turishi kerak.

Shartlarni birlashtirish

O'tgan darsdagi and, or, not bu yerda ham ishlaydi. Masalan, kinoteatr chiptasi narxi:

yosh = int(input("Yoshingiz: "))

if yosh < 7:
    narx = 0
elif yosh < 18 or yosh >= 60:
    narx = 25000
else:
    narx = 50000

if narx == 0:
    print("Siz uchun kirish bepul!")
else:
    print(f"Chipta narxi: {narx} so'm")

Ichma-ich shartlar

Bir shartning ichida boshqa shart bo'lishi mumkin. Bunda ichki blok yana 4 ta bo'sh joy suriladi:

login = input("Login: ")
parol = input("Parol: ")

if login == "admin":
    if parol == "12345":
        print("Xush kelibsiz!")
    else:
        print("Parol noto'g'ri.")
else:
    print("Bunday foydalanuvchi yo'q.")

Ichma-ich shartlar ko'payib ketsa, kodni o'qish qiyinlashadi. Ko'pincha ularni and bilan birlashtirish mumkin.

Bo'sh va bo'sh emas qiymatlar

Shart sifatida faqat True/False emas, istalgan qiymat ishlatilishi mumkin. Bo'sh satr "" va 0 soni yolg'on hisoblanadi, qolgan barcha satr va sonlar esa rost:

ism = input("Ismingiz (bo'sh qoldirsa ham bo'ladi): ")

if ism:
    print(f"Salom, {ism}!")
else:
    print("Salom, mehmon!")

Ko'p uchraydigan xatolar

1. Ikki nuqtani unutish:

yosh = 20
if yosh >= 18
    print("Kattalar uchun")

2. Chekinishni unutish:

yosh = 20
if yosh >= 18:
print("Kattalar uchun")

3. == o'rniga = yozish:

yosh = 20
if yosh = 18:
    print("Yangi voyaga yetgan")

Har birini ishga tushiring, xato xabarini o'qing va tuzating. Python = xatosini topganda hatto Maybe you meant '==' ...? («balki == demoqchimidingiz?») deb maslahat beradi.

Mashqlar

1-mashq Musbat, manfiy yoki nol

son o'zgaruvchisi musbat, manfiy yoki nol ekanini aniqlab, mos ravishda musbat, manfiy yoki nol deb chiqaring. son = -4 uchun manfiy chiqishi kerak.

son = -4
Yechimni ko'rish
son = -4
if son > 0:
    print("musbat")
elif son < 0:
    print("manfiy")
else:
    print("nol")

2-mashq Uchta sondan kattasi

max() funksiyasidan foydalanmasdan, uchta sondan eng kattasini toping va chiqaring.

a = 17
b = 42
c = 29
Ishora

Avval eng_katta = a deb oling. Keyin b undan katta bo'lsa, eng_katta ni yangilang. Xuddi shunday c ni ham tekshiring.

Yechimni ko'rish
a = 17
b = 42
c = 29
eng_katta = a
if b > eng_katta:
    eng_katta = b
if c > eng_katta:
    eng_katta = c
print(eng_katta)

E'tibor bering: bu yerda ikkita alohida if ishlatildi, elif emas, chunki ikkala tekshiruv ham bajarilishi kerak.

3-mashq Taksi narxi

Taksi xizmati shunday hisoblaydi: dastlabki 3 km uchun 10 000 so'm, har bir qo'shimcha km uchun 2 500 so'm. Masofa km o'zgaruvchisida. Narxni hisoblang. km = 8 uchun Narx: 22500 so'm chiqishi kerak.

km = 8
Yechimni ko'rish
km = 8
if km <= 3:
    narx = 10000
else:
    narx = 10000 + (km - 3) * 2500
print(f"Narx: {narx} so'm")

4-mashq Uchburchak

Uchta kesma berilgan. Ulardan uchburchak yasash mumkinmi? Qoida: istalgan ikki tomon yig'indisi uchinchisidan katta bo'lishi kerak. Mumkin yoki Mumkin emas deb chiqaring.

a = 3
b = 4
c = 8
Yechimni ko'rish
a = 3
b = 4
c = 8
if a + b > c and a + c > b and b + c > a:
    print("Mumkin")
else:
    print("Mumkin emas")

O'zingizni sinang

if qatori oxirida qaysi belgi bo'lishi shart?

  1. Nuqta-vergul ;
  2. Ikki nuqta :
  3. Vergul ,
  4. Hech qanday belgi

To'g'ri. Ikki nuqta «bu yerdan blok boshlanadi» degan ma'noni beradi.

Quyidagi kod nima chiqaradi?

x = 10
if x > 5:
    print("A")
elif x > 8:
    print("B")
else:
    print("C")
  1. A va B
  2. B
  3. A
  4. C

To'g'ri. Birinchi rost shart (x > 5) bajarildi, qolganlari tekshirilmaydi ham.

Python'da qaysi qatorlar if blokiga tegishli ekanini nima belgilaydi?

  1. Qator boshidagi chekinish (bo'sh joylar)
  2. Figurali qavslar { }
  3. end so'zi
  4. Bo'sh qator

To'g'ri. Python bloklarni chekinish orqali aniqlaydi.

Quyidagi kod nima chiqaradi?

x = 3
if x > 5:
    print("katta")
print("tugadi")
  1. katta
  2. katta va tugadi
  3. Hech narsa
  4. tugadi

To'g'ri. Shart bajarilmadi, lekin oxirgi qator if ga tegishli emas — u har doim bajariladi.

Xulosa

  • if shart: — shart rost bo'lsa, blok bajariladi.
  • else: — shart yolg'on bo'lganda bajariladigan blok.
  • elif shart: — qo'shimcha variantlar. Birinchi rost shartning bloki bajariladi, qolganlari tekshirilmaydi.
  • Blok — bir xil chekinishdagi qatorlar. Har doim 4 ta bo'sh joy ishlating.
  • Shartdan keyin ikki nuqta : qo'yishni va taqqoslashda == yozishni unutmang.