If - elif - else
TARMOQLANISH
Shu vaqtgacha yozgan dasturlarimizga e'tibor bersangiz, dasturimiz yuqoridan pastga qarab qatorma-qator bajarilib keldi. Bu chiziqli dastur deyiladi. Voqelikda esa aksar dasturlar ma'lum bir shart bajarilishi (yoki bajarilmaganiga) ko'ra kodning bir qismidan boshqa qismiga "sakrab" o'tishi tabiiy hol. Dasturlashda bu tarmoqlanish deb ataladi.
Ushbu darsimizda biz if operatori yordamida shunday shartlarni yozishni, tekshirishni va tekshiruv natijasiga ko'ra kodning turli qismlarini bajarishni o'rganamiz.
if OPERATORI
if so'zi ingliz tilidan "agar" deb tarjima qilinadi va deyarli barcha dasturlash tillarida shartlarni yozish uchun foydalaniladi.
Keling quyidagi misolni ko'ramiz. Bizda avtolar ro'yxati bor:
avtolar = ['audi','bmw','volvo','kia','hyundai']
Biz ro'yxatdagi har bil elementni katta harf bilan konsolga chiqarmoqchimiz. Bunda istisno sifatida "BMW" mashinasi nomini hamma harflarini katta bilan chiqarishimiz kerak.
for avto in avtolar: # avtolar ichidadi har bir avto uchun ...
if avto == 'bmw': # ... agar avto bmw ga teng bo'lsa ...
print(avto.upper()) # avto nomini hamma harflarini katta bilan yoz.
else: # aks holda ...
print(avto.title()) # avto nomini faqat birinchi harfini katta bilann yoz.- 1-qatorda biz for tsiklini boshladik: avto ichidagi har bir avto uchun.
- 2-qatorda shart yozdik: agar avto bmw ga teng bo'lsa (bu yerda
==belgisi tenglikni tekshirish belgisi hisoblanadi va "avtobmwga tengmi?" deb o'qiladi). - 3-qator yuqoridagi shartning badani hisoblanadi va faqatgina shart bajarilgandagina ishga tushadi va avto nomini hamma harflarini katta bilan yozadi (
.upper()metodi). - 4-qatorda yana bir yangi operator,
elsebilan tanishamiz. "Else" ingliz tilidan "aks holda" deb tarjima qilinadi vaifsharti bajarilmagandaelseqismi ichidagi kod bajariladi. - 5-qator esa
else(aks holda, ya'ni 2- qatordagi shart bajarilmaganda) ishga tushadi va avto nomining faqat birinchi harfini katta bilan yozadi (.title()metodi)
Diqqat! Shart "badani" shartdan biroz o'ngga surib yoziladi (huddi for tsikli kabi). if/else dan keyin kelgan va o'ngga surib yozilgan har bir qator if/else shartining badani hisoblanadi.
Yuoqridagi kodni bajaramiz, va natijani ko'ramiz:
avtolar = ['audi','bmw','volvo','kia','hyundai']
for avto in avtolar: # avtolar ichidadi har bir avto uchun ...
if avto == 'bmw': # ... agar avto bmw ga teng bo'lsa ...
print(avto.upper()) # avto nomini hamma harflarini katta bilan yoz.
else: # aks holda ...
print(avto.title()) # avto nomini faqat birinchi harfini katta bilan yoz.TRUE/FALSE
Yuqorida shartni tekshirish uchun == operatoridan foydalandik. Bu operatorni oddiy tilga tarjima qilsak "tengmi?" degan ma'noni beradi.
Agar shartning ikki tarafidagi qiymatlar teng bo'lsa ifoda TRUE qiymatini qaytaradi ("True" so'zi ingliz tilidan "haqiqiq" yoki "to'g'ri" deb tarjima qilinadi).
Aksincha, qiymatlar tenglik qanoatlantirilmasa, ifoda FALSE qiymatini qaytaradi ("False" so'zini ingliz tilidan "yolg'on" deb tarjima qilsak bo'ladi).
Quyidagi misollarga e'tibor bering. Biz ism degan o'zgaruvchi yaratdik, va unga 'Ali' matnini yukladik. Keling endi == yordamida ism ning qiymatini tekshirib ko'ramiz:
Ko'rib turganingizdek avval ism=='Ali' (ism 'Ali' ga tengmi?) deb so'raganimizda, ifoda TRUE (Ha) degan javobni qaytardi, keyin esa ism=='Vali' (ism 'Vali' ga tengmi?) deb so'raganimizda esa, ifoda FALSE (Yo'q) deb qiymat qaytardi.
Demak, if/else bog'lamasida, if ning badani ifoda True bo'lganda, else ning badani esa ifoda False bo'lganda bajariladi.
MATNLARNI SOLISHTIRISH
Aksar tizimlar foydalanuvchi kiritgan matnni ma'lum bir ko'rinishga keltirib oladi. Buning sababi, kompyuter uchun 'Ali', 'ALI', va 'ali' bu uchta turli hil ism. Ularni solishtirish uchun esa bir ko'rinishga keltirib olish kerak.
Tasavvur qiling siz yangi email manzil ochmoqchisiz, va o'zingizga yangi foydalanuvchi ismini tanlashingiz kerak. Kompyuter siz kiritgan foydalanuvchi ismini tizimdagi mavjud foydalanuvchilar bilan solishtiradi va agar ism band bo'lsa sizga boshqa ism tanlashni aytadi. Solishtirish jarayonida esa, siz tanlagan ismni kichik harflarga o'tkazib, boshqa ismlar bilan solishtiradi.
Xo'sh, turli ko'rinishda yozilgan matnlarni qanday qilib solishtiramiz? Juda oddiy. Matnlarni solishtirishdan avval .lower() metodi yordamida kichik harflar ko'rinishiga keltirib olamiz:
ism = 'Ali' ism.lower() == 'ali'
QIYMATLARNING TENG EMASLIGINI TEKSHIRISH
Agar ikki qiymatning teng emasligini tekshirish talab qilinsa, != operatoridan foydalanilamiz.
ism = input('Ismingiz nima?\n>>>') # Foydalanuvchi ismini so'raymiz
if ism.lower() != 'ali': # Agar ism Aliga teng bo'lmasa ...
print(f"Uzr, {ism.title()} biz Alini kutayapmiz.") # quyidagi xabar chiqadi
else:
print("Salom, Ali")Demak yuqoridagi kodning 2-qatorida ism ichidagi qiymat 'ali' ga teng bo'lmasa "Uzr, {ism} biz Alini kutyapmiz" degan xabarni chiqar dedik. Aks holda (else), "Salom, Ali" degan xabar chiqadi.
Shartlarda else qismi bo'lishi majburiy emas. Bunga keyingi bo'limlarda tushunarliroq misollar ko'ramiz.
SONLARNI SOLISHTIRISH
Sonlarni solishtirishda yuqoridagi teng (==) va teng emas (!=) shartlariga qo'shimcha ravishda quyidagi mantiqiy shartlar ham qo'shiladi:
javob = float(input("12x6 nechiga teng?>>>"))
if javob!=72:
print("Javob xato!")yosh = int(input("Yoshingiz nechida?>>>"))
if yosh>=18: # yosh 18 dan katta yoki teng bo'lsa
print('Xush kelibsiz!')
else: # ask holda
print('Kirish mumkin emas!')login = input("Yangi login tanlang:")
if len(login)<=5: # login uzunligini tekshiramiz
print("Login 5 harfdan ko'proq bo'lishi shart!")Sonlarni solishtirishda arifmetik ifodalar ham yozishimiz mumkin:
yil = int(input("Tug'ilgan yilingizni kiriting:"))
if 2020-yil<18: # foydalanuvchining yoshini hisoblaymiz
print(f"Yoshingiz {2020-yil}da ekan.")
print("Kirish mumkin emas!")
else:
print("Xush kelibsiz!")BIR QATOR if/else
Qisqa kodlar uchun shart va uning badanini 1 qatorga jamlab yozishimiz ham mumkin:
yosh = int(input("Yoshingiz nechida?>>>"))
if yosh>65: print("Siz COVID-19 risk guruhida ekansiz")x, y = 25, 50 # x=25 va y=50
print("x>y") if x>y else print("x<y")BIR NECHTA SHARTLARNI TEKSHIRISH
if-elif-else zanjiri, "and", "or" operatorlari bilan tanishamiz
if-elif-else KETMA-KETLIGI
Dastur davomida bir nechta shartni tekshirish talab qilinishi mumkin. Bunday holatda biz if-elif-else ketma-ketligidan foydalanamiz. elif - else va if so'zalrining jamlanmasi bo'lib, "aks holda, agar" deb tarjima qilinadi. Bunday if bilan boshlangan ketma-ketlik bir nechta elif lardan iborat bo'lishi mumkin.
Python avval if shartini tekshiradi, shart bajarilmasa elif ga o'tadi, birinchi elif sharti bajarilmasa keyingi elif ga o'tadi va hokazo davom etaveradi.
Diqqat!if-elif-else ketma-ketlikda biror shart bajarilishi bilan, Python qolgan shartlarni tekshirmaydi.
Keling bir misol ko'ramiz. Hayvonot bo'giga kirish quyidagicha belgilangan:
- 4 yoshdan kichik bolalarga kirish bepul
- 4 yoshdan 12 yoshgacha kirish 5000 so'm
- 12 yoshdan kattalarga 10000 so'm
Foydalanuvchidan yoshini so'rab, hayvonot bog'iga kirish chiptasi narhini chiqaruvchi dastur yozamiz.
yosh = int(input('Yoshingiz nechida? '))
if yosh<=4:
print('Sizga kirish bepul.')
elif yosh<=12:
print('Sizga kirish 5000 so\'m')
else:
print('Sizga kirish 10000 so\'m')Yuqoridagi kod avval foydalanuvchi yoshini so'raydi. 2-qatorda yosh 4 dan kichik ekanligini tekshiradi. Agar bu shart bajarilsa shartlarni tekshirish shu yerdayoq to'xtaydi va keyingi shartlar tashlab o'tib ketiladi.
if yosh<=4 bajarilgandagi natija
Agar yosh<=4 sharti bajarilmasa, keyingi elif yosh<=12 sharti tekshiriladi, agar shart bajarilsa quyidagi natija chiqadi:
Agar yuoqridagi ikki shart ham bajarilmasa navbat o'z-o'zidan else bilan kelgan kod bajariladi:
Kod yozishda yaxshi amaliyotlardan biri, kodlarni qisqa yozish va buyruqlarni qayta-qayta takrorlamaslik. Bu kelajakda kodni o'zgartirishda ham juda qo'l keladi.
yosh = int(input('Yoshingiz nechida? '))
if yosh<=4:
price = 0
elif yosh<=12:
price = 5000
else:
price = 10000
print(f"Sizga kirish {price} so'm")Avval aytganimizdek, if-elif-else zanjirida bit nechta elif lar bo'lishi mumkin. Misol uchun, hayvonot bog'i qariyalar uchun chegirma e'lon qilsa, kodimizni quyidagicha o'zgartirishimiz mumkin:
yosh = int(input('Yoshingiz nechida? '))
if yosh<=4: # yosh bolalarga bepul
price = 0
elif yosh<=12: # 4 dan 12 yoshgacha 5000 so'm
price = 5000
elif yosh<65: # 12 dan katta va 65 dan kichiklarga narh 10000 so'm
price = 10000
else: # qariyalarga esa 8000 so'm
price = 8000
print(f"Sizga kirish {price} so'm")if-elif-else zanjirida ham else qismi majburiy emas:
yosh = int(input('Yoshingiz nechida? '))
if yosh<=4:
price = 0
elif yosh<=12:
price = 5000
elif yosh<65:
price = 10000
elif yosh>=65:
price = 8000
print(f"Sizga kirish {price} so'm")AND, OR OPERATORLARI
Yuqorida aytganimizdek, if-elif-else zanjirida shartlarning biri bajarilishi bilan, Python qolgan shartlarni tekshirmaydi va ularni bajarmaydi. Lekin ba'zida biz 2 yoki undan ko'p shartlarni tekshirishni talab qilishimiz mumkin, buing uchun AND va OR operatorlaridan foydalanamiz.
OR OPERATORI
OR ingliz tilidan "yoki" deb tarjima qilinadi, va ikki va undan ko'p shartlardan biri bajarilishini tekshirishda ishlatiladi. Quyidagi misolni ko'raylik, foydalanuvchidan hafta kunini so'raymiz va agar kun shanba yoki yakshanba bo'lsa, bugun dam olish kuni degan xabarni chiqaramiz, aks holda bugun ish kuni degan xabarni chiqaramiz:
kun = input("Bugun nima kun?>>>")
if kun.lower()=='shanba' or kun.lower()=='yakshanba':
print('Bugun dam olish kuni.')
else:
print('Bugun ish kuni.')2-qatrodagi or operatoriga e'tibor qiling, bu operator kun.lower()=='shanba' yoki kun.lower()=='yakshanba' shartlaridan biri bajarilsa TRUE qiymatini qaytaradi
AND OPERATORI
AND ingliz tilidan "va" deb tarjima qilinadi, va ikki va undan ko'p shartlarning barchasi bajarilishini tekshirishda ishlatiladi. AND operatori bilan yozilgan shartlarning barchasi bajarilgandagina TRUE qiymati qaytadi, agar shartlardan biri bajarilmay qolsa ham FALSE qiymati qaytadi.
kun = input("Bugun nima kun?")
harorat = float(input("Havo harorati qanday?"))
if kun.lower()=='yakshanba' and harorat>=30:
print("Cho'milgani ketdik!")
elif kun.lower()=='yakshanba' and harorat<30:
print("Uyda dam olamiz!")3-qatordagi and operatori kun.lower()=='yakshanba' va harorat>=30 shartlarining ikkisi ham bajarilgandagina TRUE qiymatini qaytaradi, aks holda qiymat FALSE bo'ladi.
BIR NECHTA SHARTLARNI KETMA-KET YOZISH
Shartlarni yozishda bir nechta and or operatorlarini aralashtirib ham yozish mumkin.
kun = input("Bugun nima kun?")
harorat = float(input("Havo harorati qanday?"))
if (kun.lower()=='shanba' or kun.lower()=='yakshanba') and harorat>=30:
print("Cho'milgani ketdik!")
elif (kun.lower()=='shanba' or kun.lower()=='yakshanba') and harorat<30:
print("Uyda dam olamiz!")3-qatorga e'tibor bersangiz biz avval kun shanba yoki yakshanba ekanligini so'ngra haroratni tekshirdik. Bu shart bajarilishi uchun kun shanba yoki yakshanba va harorat 30 dan baland bo'lishi shart.
BOOLEAN MA'LUMOTLAR TURI
Avvalgi darsimizda biz turli ifodalarni solishtirishda TRUE yoki FALSE qiymatlari qaytishini ko'rdik. Bu qiymatlar boolean (mantiqiy) qiymatlar deb ataladi, va dasturlashda juda keng qo'llaniladi. Pythonda o'zgaruvchilarda boolean qiymatlarni ham saqlash mumkin.
Quyidagi dasturga e'tibor bering. Deylik, restoranimizga kelgan mijoz 15000 so'mlik taom oldi, biz mijoz qo'shimcha choy va salat ham olgan (olmaganiga) qarab ularning narhini ham yakuniy narhga qo'shishimiz kerak. Mijozning choy yoki salat olgan (olmaganini) biz TRUE va FALSE qiymatlari bilan belgiladik.
narh = 15000 # mijoz 15000 so'mga taom oldi.
choy = True # mijoz choy ham oldi
salat = False # mijoz salat olmadi
if choy and salat: # agar mijoz choy ham salat ham olgan bo'lsa
narh = narh + 10000 # narhga 10000 so'm qo'shamiz
elif choy or salat: # agar choy yoki salat olgan bo'lsa
narh = narh + 5000 # narhga 5000 so'm qo'shamiz
print(f"Jami {narh} so'm") # yakuniy narhni chiqaramizE'tibor bering, choy va salat boolean (mantiqiy) qiymatlar bo'gani uchun, 5 va 7-qatorlarda biz choy==True yoki salat==True deb yozib o'tirishimiz shart emas.
Yuoqirdagi misolda choy = True (choy oldi) va salat = False (salat olmadi) bo'lgani uchun yakuniy narh narh+5000=20000 chiqdi.
Boolean o'zgaruvchilarni saqlashda TRUE va FALSE qiymatlari o'rniga 1 va 0 sonlarini ham ishlatish mumkin.
SHARTLARNI KETMA-KET TEKSHIRISH
if-elif-else zanjirining kamchiligidan biri, shartlardan biri bajarilishi bilan, qolgan shartlar tekshirilmaydi. Shung uchun ba'zida shartlarni ketma ket tekshirish uchun, har bir shartni alohida if bilan ajratish talab qilinishi mumkin.
Yuqoridagi misolni kengaytiraylik:
narh = 15000 # mijoz 15 so'mga ovqat oldi
choy = True
salat = False
non = True
kompot = True
assorti = False
#Quyidagi har bir shart alohida tekshiriladi va bir-biriga bog'liq emas
if choy: # agar choy olsa
print("Mijoz choy oldi.")
narh = narh + 3000
if salat: # agar salat olsa
print("Mijoz salat oldi.")
narh = narh + 5000
if non: # agar non olsa
print("Mijoz non oldi.")
narh = narh + 2000
if kompot: # agar kompot olsa
print("Mijoz kompot oldi.")
narh = narh + 5000
if assorti: # agar assorti olsa
print("Mijoz assorti oldi.")
narh = narh + 15000
print(f"Jami {narh} so'm")Yuqoridagi dasturda har bir if alohida tekshiriladi va avvalgi yoki keyingi if ga bog'liq emas.
RO'YXAT TARKIBINI TEKSHIRISH
in OPERATORI
in operatori yordamida biz ro'yxatning tarkibida ma'lum bir element borligini tekshirishimiz mumkin.
menu = ['osh','qazonkabob','shashlik','norin','somsa'] 'manti' in menu # menu da manti bormi?
menu = ['osh','qazonkabob','shashlik','norin','somsa'] 'osh' in menu # menu da osh bormi?
menu = ['osh','qazonkabob','shashlik','norin','somsa']
ovqat = input('Nima ovqat yeysiz?>>>')
if ovqat.lower() in menu:
print('Buyurtma qabul qilindi.')
else:
print('Afsuski bizda bunday ovqat yo\'q')not in OPERATORI
not in operatori yordamida esa biror element ro'yxatda yo'qligini tekshirishimiz mumkin.
menu = ['osh','qazonkabob','shashlik','norin','somsa'] 'manti' not in menu # menu da manti yo'qmi?
menu = ['osh','qazonkabob','shashlik','norin','somsa'] 'osh' not in menu # menu da osh yo'qmi?
menu = ['osh','qazonkabob','shashlik','norin','somsa']
ovqat = input('Nima ovqat yeysiz?>>>')
if ovqat.lower() not in menu:
print('Afsuski bizda bunday ovqat yo\'q')
else:
print('Buyurtma qabul qilindi.')not operatorini boshqa shartlarning oldidan ham qo'yishimiz mumkin. Misol uchun: if not a==5 ifodasi if a!=5 ifodasi bilan bir hil natija qaytaradi.
IKKI RO'YXATNI SOLISHTIRISH
Ikki ro'yxatning tarkibi quyidagicha tekshiriladi:
menu = ['osh','qazonkabob','shashlik','norin','somsa']
buyurtmalar = ["osh","somsa","manti", "shashlik"]
for taom in buyurtmalar:
if taom in menu:
print(f"Menuda {taom} bor")
else:
print(f"Kechirasiz, menuda {taom} yo'q")RO'YXAT BO'SH EMASLIGINI TEKSHIRISH
Yuqoridagi dasturimizda biz foydalanuvchi buyurtma berdi deb tasavvur qilyapmiz. Lekin foydalanuvchidan bo'sh ro'yxat kelsachi? Demak for tsiklini bajarishdan avval ro'yxat bo'sh emasligiga amin bo'lishimiz kerak. Buning uchun avvalgi kodimizni quyidagicha o'zgartiramiz:
menu = ['osh','qazonkabob','shashlik','norin','somsa']
buyurtmalar = ["osh","somsa","manti", "shashlik"]
if buyurtmalar: # ro'yxatda biror element bo'lsa bu ifoda TRUE qaytaradi
for taom in buyurtmalar:
if taom in menu:
print(f"Menuda {taom} bor")
else:
print(f"Kechirasiz, menuda {taom} yo'q")
else: # agar ro'yxat bo'sh bo'lsa
print("Savatchangiz bo'sh!")Demak if royxat_nomi: ifodasi agar ro'yxatda bir dona element bo'lsa ham TRUE qiymat qaytaradi, aks holda FALSE qiymatini qaytaradi.
Amaliyot
- Yangi
cars = ['toyota', 'mazda', 'hyundai', 'gm', 'kia']degan ro'yxat tuzing, ro'yxat elementlarining birinchi harfini katta qilib konsolga chqaring. GM uchun ikkala harfni katta qiling.
- Yuqoridagi mashqni teng emas (
!=) operatori yordamida bajaring. - Foydalanuvchi login ismini so'rang. Agar login admin bo'lsa, "Xush kelibsiz, Admin. Foydalanuvchilar ro'yxatini ko'rasizmi?" xabarini konsolga chiqaring. Aks holda, "Xush kelibsiz,
{foydalanuvchi_ismi}!" matnini konsolga chiqaring. - Foydalanuvchidan 2 ta son kiritishni so'rang. Agar ikki son bir-biriga teng bo'lsa, "Sonlar teng" ekan degan yozuvni konsolga chiqaring.
- Foydalanuvchidan istalgan son kiritishni so'rang. Agar son manfiy bo'lsa konsolga "Manfiy son", agar musbat bo'lsa "Musbat son" degan xabarni chiqaring.
- Foydalanuvchidan son kiritishni so'rang, agar son musbat bo'lsa uning ildizini hisoblab konsolga chiqaring. Agar son manfiy bo'lsa, "Musbat son kiriting" degan xabarni chiqaring.
AMALIYOT
Quyidagi dasturlarni alohida fayllarga yozing va bajaring:
- Foydalanuvchidan juft son kiritishni so'rang. Agar foydalanuvchi juft son kiritsa "Rahmat!", agar toq son kiritsa "Bu son juft emas" degan xabarni chiqaring.
- Foydalanuvchi yoshini so'rang, va muzeyga kirish uchun chipta narhini quyidagicha chiqaring:
- Agar foydalanuvchi 4 yoshdan kichkina yoki 60 dan katta bo'lsa bepul
- Agar foydalanuvchi 18 dan kichik bo'lsa 10000 so'm
- Agar foydalanuvchi 18 dan katta bo'lsa 20000 so'm
- Foydalanuvchidan ikita son kiritishni so'rang, sonlarni solishtiring va ularning teng yoki katta/kichikligi haqida xabarni chiqaring
mahsulotlardegan ro'yxat yarating va kamida 10 ta turli mahsulotni kiriting. Yangi,savatdegan bo'sh ro'yxat yarating va foydalanuvchidan savatga kamida 5 ta mahsulot kiritishni so'rang. Savatdagi elementlarni,mahsulotlarro'yxati bilan solishtiring va qaysi biri ro'yxatda bo'lsa "Mahsulot do'konimizda bor" aks holda, "Mahsulot do'konimizda yo'q" degan xabarlarni chiqaring.
- Yuqoridagi dasturni quyidagicha o'zgartiring: foydalanuvchidan 5 ta mahsulot kiritishni so'rang. Foydalanuvchi so'ragan va do'konda bor mahsulotlarni yang,
bor_mahsulotlardegan ro'yxatga, do'konda yo'q mahsulotlarni esamavjud_emasdegan ro'yxatga qo'shing. Agar mavjud_emas ro'yxati bo'sh bo'lsa, "Siz so'ragan barcha mahsulotlar do'konimizda bor" degan xabarni, aks holda esa "Quyidagi mahsulotlar do'konimizda yo'q: ....." degan xabarni chiqaring.
foydalanuvchilardegan ro'yxat tuzing, va kamida 5 ta login qo'shing. Foydalanuvchidan yangi login tanlashni so'rang va foydalanuvchi kiritgan loginni foydalanuvchilar degan ro'yxatning tarkibi bilan solishtiring. Agar ro'yxatda bunday login mavjud bo'lsa, "Login band, yangi login tanlang!" aks holda "Xush kelibsiz, foydalanuvchi!" xabarini chiqaring.
- Foydalanuvchidan biror butun son kiritishni so'rang. Foydalanuvchi kiritgan sonni 2 da 10 gacha bo'lgan sonlardan qay biriga qoldiqsiz bo'linishini konsolga chiqaring.