Yuklanmoqda...

4-Ma'ruza: Shartli operatorlar.

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.

Tarmoqlanishga misol

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.

Demak quyidagi kodni yozamiz:

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.

Kodni tahlil qilaylik:

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.

Natija:

 

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.

Yandex.uz sahifasida ro'yxatdan o'tish jarayoni

Yuqoridagi misolda, kimdur anvar@yandex.ru manzilini band qilgan, agarda men 'Anvar', yoki 'ANvar', yoki 'ANVAR' deb login tanlasam ham, anvar@yandex.ru band bo'gani sababli men so'ragan loginlar rad qilinaveradi.

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'

Natija: True

 

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")

Natija

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: