Tarmoqlanuvchi dasturlash
if-else
operatori
Shu vaqtgacha biz faqat chiziqli dasturlashdan foydalandik, ya’ni biz yozgan kodlarning hammasi chiziqli (ketma-ket) ravishda ishladi va biror shartga ko’ra ma’lum bir kod qismi qolib ketmadi, albatta izohlardan tashqari (# belgisi bilan boshlanuvchi qatorlar). Bunday kodlash bilan murakkab dasturlarni yozishning iloji yo’q, shuning uchun endilikda biz bosqichma-bosqich chiziqli dasturlashdan tarmoqli dasturlashga, undan keyin esa takrorlanuvchi dasturlashga o’tamiz. Albatta biz har doim ushbu
uchta turdan bir vaqtda foydalanamiz. Keling, amaliy misolga o’tsak. Masalan, foydalanuvchi o’zinning shaxsiy sahifasiga kirmoqchi. Buning uchun u dasturga o’zing yashirin paroli va email pochtasini yozishi kerak. Agar foydalanuvchi kiritgan ma’lumotlar mos bo’lmasa, unda biz foydalanuvchiga bu haqida xabar berishimiz kerak. Bu kabi buyruqlarni yozishda, biz if-elif-else
buyruq strukturasidan foydalanamiz. Avval soddaroq holni qaraylik, bizda \(a, b \in R\) (ikkita haqiqiy sonlar )
berilgan bo’lsin. Ulardan qaysi biri katta ekanligini chop qilishimiz kerak, quyidagicha.
[1]:
# birinchi son
a = 20
# ikkinchi son
b = 15
# Bu yerda
# 1) if kalit so'z, har doim yozilishi kerak
# ma'nosi - agar
# keyin bo'sh joy tashlab
# Shartni yozamiz: a > b
# Undan so'ngi ikki nuqta (:) majburiy qo'yiladi
if a > b:
# agar a > b shart to'g'iri bo'lsa
# else kalit so'zgacha bo'lgan
# hamma qatordagi kodlar bajariladi
# faqat biz print funksiyani
# qator boshidan 2 ta bo'sh joydan keyin yozdik
print("Birinchi son katta")
# agar a > b shart noto'g'iri bo'lsa,
# else kalit so'zi va ikkit nuqta(:) majburiy
else:
# agar a > b shart noto'g'iri bo'lsa
# u holda else: dan keyingi hamma kod
# bajariladi
# faqat biz print funksiyani
# qator boshidan 2 ta bo'sh joydan keyin yozdik
print("Ikkinchi son katta")
Birinchi son katta
Yuqoridagi kodda hozirgacha bo’lgan eng qiyini. Shuning uchun batafsil har xil misollar yordamida tushunishga harakat qilamiz:
joriy holda \(a=20\) va \(b=15\). Shunga asosan \(a>b \rightarrow 20>15\) ifoda to’g’iri, ya’ni 20 soni har doim 15 dan katta bo’ladi.
Ushbu holni ifodalash uchun biz, Pythonda
if
kalit so’zini yozamiz, undan so’ng esa bizga zarur bo’lgan shartni ya’nia > n
va oxirda esa ikki nutqani (:
)demak, agar \(a\) soni \(b\) sonidan katta bo’lsa (bu joriy holda to’g’iri), u holda
print("Birinchi son katta")
shu kodni ishlatamiz, ya’niBirinchi son katta
natija chiqadi.print("Birinchi son katta")
kod qismiif
ga tegishligini ifodalash uchun bizprint("Birinchi son katta")
niif
ga qaraganda bir nechta bo’sh joy tashlab, ichkariga kiritgan holda yozamiz (ushbu holda 2 ta).Bu narsani biz ingliz tilida ‘indentation’ deb ataymiz, o’zbek tilida chekinish deb tarjima qilsak to’g’iri bo’ladi deb o’ylaymiz. Bu narsa dastur kodida sintaktik xato bermasligi uchun, biz har doim bir sondagi bo’sh joy tashlashimiz kerak. Ushbu kitobda biz har doim 2 ta tashlaymiz.
Ushbu kodning ikkinchi qismida, ya’ni
if
dagi shart noto’g’iri bo’lganda, biz boshqa kodprint("Ikkinchi son katta")
ni ishga tushirmoqchimiz. Buning uchun biz chekinishi (indentation)if
bilan bir xil boshlanuvchielse
(manosi, boshqa holda) kalit so’zni ikki nuqta bilan yozamiz hamda keyingi qatorga ikkitalik chekinishdan keyin esaprint("Ikkinchi son katta")
yozamiz.
Yuqoridagi kod bajarilishi natijasida bizga Ikkinchi son katta
yozuvi chiqadi. Chunki \(a\) o’zgaruvchining qiymati \(b\) nikidan katta. Keling qulay bo’lishi uchun quyidagi atama kiritsak: ushbu kod ishga tushish natijasida bir qismdagi kod ishga tushiriladi (hozirgi holda, print("Birinchi son katta")
), shu kodlarni if
ning va else
ning kodlari deymiz.
Mantiqiy(bool
) tur bilan ishlash
Bundan oldingi kod yordamida biz tarmoqlanuvchi dasturlashni o’rgandik. Aslida biz if
kalit so’zidan keyin qo’ygan ifodamiz rost (True) yoki yolg’on (False) ekanligini tekshirdik. Agar ifoda rost bo’lsa, if
ning kodi bajariladi, aks holde else
niki. Ushbu \(a>b\) ifodaning natijasi ikki xil bo’lishi mumkin: rost(True) yoki yolg’on(False). Bu kabi turni Pythonda ifodalash uchun biz bool
turidan foydalanamiz. Ushbu turda faqat ikkita qiymat bo’ladi: True
yoki False
. Bu
turda o’zgaruvchi e’lon qilmoqchi bo’lsak, unda biz True
yoki False
qiymatlaridan ishlatamiz. True
va False
qiymatlari literal qiymatlar deyiladi.
[2]:
# bool turidagi o'zgaruvchi
a = True
print(a)
b = False
print(b)
True
False
Bunday turni katta, kichik va teng amallari orqali ham yaratishimiz mumkin.
[3]:
# a o'zgaruvchisi
a = 15
# b o'zgaruvchisi
b = 20
# a > b ifodani boshqa bool
# turidagi o'zgaruvchiga
# yuklash
c = a > b
print(c)
False
Natija har doim False
chiqdi chunki \(b\) o’zgaruvchisining qiymati \(a\) nikidan katta. Keling bundan oldingi kodi qayta yozaylik. Faqat yuqoridagi kod kabi, shart natijasini boshqa alohida o’zgaruvchiga yuklab.
[4]:
a = 20
b = 15
c = a > b
if c:
print("Birinchi son katta")
else:
print("Ikkinchi son katta")
Birinchi son katta
Ushbu turda bir qancha turli xil amallar mavjud bo’lib, ular odatiy matematik amallardan farqlanadi, ular:
and
- amali ikkita qiymat ham rost (True
) bo’lsa natija ham rostTrue
[5]:
a = True
b = True
# natija True
c = a and b
print(c)
a =True
b = False
# natija False
c = a and b
print(c)
True
False
or
- amali ikkita qiymatdan biri rost (True
) bo’lsa, natija ham rostTrue
[6]:
a = True
b = True
# natija True
c = a or b
print(c)
a =True
b = False
# natija True
c = a or b
print(c)
a =False
b = False
# natija False
c = a or b
print(c)
True
True
False
not
- amali qiymatni teskarisiga o’tkazadi, rost bo’lsa yolg’on yoki yolg’on bo’lsa rostga
[7]:
a = True
# natija False
c = not a
print(c)
a = False
# natija rost
c = not a
print(c)
False
True
if-elif-else
operatori
O’tgan boblarda biz ushbu operatorning qisqartirilgan ko’rinishi bilan tanishdik. Ushbu qismda esa to’liq o’rganib chiqamiz. Avvalo ushbu operator ishlashi uchun eng kamida operatorning if qismi bo’lishi shart. Qolgan ikki qismi elif
va else
kodga qarab zurur bo’lsa ishlatiladi.
[8]:
# email o'zgaruvchisi
email = 'example@mail.com'
# yuqoridagi email to'g'iriligini tekshirish
if email == 'example@mail.com':
# if ning kodi
print("Kiritilgan email to'g'iri")
Kiritilgan email to'g'iri
Bu operatorning elif
(else if) qismi bir vaqtda undan oldingi if
yoki elif
ga teskarilikni hamda ya’na bitta shartni bildiradi. Quyidagi kiritilgan \(a\) raqamini so’zlar bilan ifodalashga misolni ko’raylik.
[9]:
a = 5
# a=0 bo'lgan holat
if a == 0:
print('Nol')
# # a=1 bo'lgan holat
elif a == 1:
print('Bir')
elif a == 2:
print('Ikki')
elif a == 3:
print('Uch')
elif a == 4:
print('To\'rt')
elif a == 5:
print('Besh')
elif a == 6:
print('Olti')
elif a == 7:
print('Yetti')
elif a == 8:
print('Sakkiz')
elif a == 9:
print('To\'qiz')
else:
print("Kiritilgan son 0 va 9 orasida bo'lishi shart")
Besh
Yuqoridagi kod birinchi if
yordamida \(a\) o’zgaruvchisi qiymatini 0 ga tekshiradi, agar teng bo’lmasa o’zidan keyingi, birinchi elif
ishlaydi va bu soning qiymatini 1 ga tengligini tekshiradi va shu tarzda davom etadi. Oxirida esa, raqamlar tugagandan so’ng, else
qismida raqam chegaradan chiqib ketdimi yo’qmi shu tekshiriladi. Agar ushbu ketma-ketlikning biror shart to’g’iri bo’lsa, shu qismdagi kod ishlaydi va dasturning qolgan qismlariga (shartlariga) o’tilmaydi. Yuqoridagi
qiymat 5 bo’lgani uchun biz Besh
ni natija sifatida ko’rdik. Demak, beshgacha bo’lgan 6 shartni bittalab tekshirilgan va ulardan birinchi beshtasi noto’g’iri bo’lgan.
Namunalar
Keling yuqorida o’rganib chiqqan mavzularimizga ozroq qo’shimcha qilib internet sahifasiga kirishga ruxsat bor yoki yo’qligini tekshiruvchi kichkina dastur yozib ko’raylik va shu orqali olgan bilimlarimizni mustahkamlaylik. Buning uchun foydalanuvchi tomonidan qiymatlarni kiritishni birinchi o’rganaylik. Buning uchun biz input(str)
funksiyasidan foydalanamiz, bu funksiya bizga str
(satr) turida qiymat qaytaradi. Quyida foydalanuvchi kiritgan matni chop qiluvchi dastur.
[10]:
# matni name o'zgaruvchisiga yozish
name = input('Ismingizni kiriting: ')
# Kiritilgan qiymatni chop qilish
print('Sizning ismingiz:', name)
Sizning ismingiz: Alisher
Yuqorida ko’rib turganimizdek, biz birinchi input()
funksiyasi orqali foydalanuvchi o’zining ismini yozishi uchun maydonni hosil qilyabmiz. Foydalanuvchi o’zining ismini kiritib, keyin ‘kiritish’ (Enter) tugmasini bosgandan so’ng, biz input()
funksiyasi qaytargan natijasini ekranga chiqarayapmiz. Agar qaytarilgan qiymat, masalan, foydalanuvchi yoshi bo’lsa unda, biz bu qiymatni butun songa o’tkazishimiz kerak, chunki input()
funksiyasi har doim sart qaytaradi. Buning uchun bizda
tayyor funkiyalar har bir tur uchun mavjud. Oson bo’lishi uchun avval str
va int
o’zgaruvhisi farqiga oid ba’zi sodda misollarni qarab chiqaylik. Quyidagi kodda ulardan bir nechtasiga namuna keltirilgan.
[11]:
# a qiymatni insoning yoshini saqlaydi
# a o'garuvchisi satr butun emas
a = '25'
# keyinig o'zgaruvchini qaraylik
# bu o'zgaruvchi butun turda
b = 20
# agar o'zgaruvchini qo'shsak
# unda xatolik yuz beradi
# chunki satr turiga butun turni
# qo'shish mumkin emas
c = a + b
print(c)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[11], line 12
6 b = 20
8 # agar o'zgaruvchini qo'shsak
9 # unda xatolik yuz beradi
10 # chunki satr turiga butun turni
11 # qo'shish mumkin emas
---> 12 c = a + b
13 print(c)
TypeError: can only concatenate str (not "int") to str
Agar yuqoridagi kodni to’g’irlab ishlatmoqchi bo’lsak, unda \(a\) sonini int
turiga o’kazishimiz zarur. Buning uchun int()
funksiyasini ishlatamiz.
[12]:
a = '25'
b = 20
# a ning qiymatini int turiga
# o'girib uni d
# o'zgaruvchisiga saqladik
d = int(a)
c = d + b
print(c)
45
Bir eng muhim jihatdni turdan boshqa turga o’zgaruvchini o’tkazishdan oldin bilishimiz kerak. Odatda biz hamma turlarni boshida satr ko’rinishida, ya’ni satr turida olamiz va ularning qanday ma’lumot ekanligiga qarab mos turlarga o’giramiz. Lekin har doim ham bunday qilishning iloji yo’q. Masalan, tassavur qilaylik foydalanuvchi o’zining yoshini kiritish jarayonida xatolik qilib qo’ydi. Misol uchun ‘22’ o’rniga ‘22a’ yoki ‘22 ‘ kiritib qo’ydi. Unda yuqoridagi int()
funksiyasi xatolik
qaytaradi va dastur oxirigacha yetmasdan yakunlanadi. Quyidagi kodda ushbu hol uchun ba’zi bir misollarni ko’ramiz.
[13]:
# to'g'ir holat
age = '22'
# natija <class 'str'>
print(type(age))
# endi int turiga o'tkazaylik
age = int(age)
# natija <class 'int'>
print(type(age))
# xato hollatlar
age = int('22a') # bu yerda xatolik bor
# bu joyga kod kelmaydi
print(age)
<class 'str'>
<class 'int'>
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
Cell In[13], line 10
8 print(type(age))
9 # xato hollatlar
---> 10 age = int('22a') # bu yerda xatolik bor
11 # bu joyga kod kelmaydi
12 print(age)
ValueError: invalid literal for int() with base 10: '22a'
Bu kabi hollatlarda biz ValueError
ga ega bo’lamiz, buning ma’nosi kiritilgan qiymatni (‘22a’) int
turiga o’girib bo’lmaydi. Endi asosiy maqsadimiz bo’lgan, dasturga qaytsak bo’ladi.
[14]:
email = input('Emailingizni kiriting: ')
password = input('passwordingizni kiriting: ')
# birinchi shart
a = email == 'example@mail.com'
# ikkinchi shart
b = password == 'qwerty1234'
# foydalanuvchi sahifasiga kirishi
# uchun ikkisi ham
# bir vaqtda to'g'iri
# bo'lishi kerak
if a and b:
print("Siz shaxsiy sahifangizdasiz")
else:
print("Email yoki parolingiz xato kiritilgan")
Siz shaxsiy sahifangizdasiz