Mavzu
Dars xulosasi
match / case(Pattern Matching) — berilgan qiymatni bir nechta aniq variantlar bilan solishtirib, mos kelgan blokni bajaruvchi zamonaviy tanlash operatori.- Ko‘p sonli variantlar (hafta kunlari, oylar, menyu buyruqlari) mavjud bo‘lganda
if/elifga qaraganda ancha qisqa va toza yoziladi. case _:— barcha oldingi holatlarga tushmagan qolgan har qanday qiymatlar uchun ishlaydi (elsening analogi).|(quvur / pipe) belgisi orqali bittacaseichida bir nechta qiymatni birlashtirish mumkin (case 6 | 7:).[1, n]oralig‘idagi sonlarni filtrlashda (masalan, 3 ga karrali) hamfor, hamwhilesikllaridan muvaffaqiyatli foydalanish mumkin.- 1-bobning asosiy algoritmlari (arifmetika, shartlar, sikllar, tanlash operatorlari) to‘liq yakunlandi!
Qo'shimcha ma'lumot
Nega boshqa tillarda switch bor, Pythonda esa yo‘q edi?
C, C++, Java va JavaScript tillarida o‘nlab yillardan beri switch / case operatori mavjud edi. Python yaratuvchilari esa oddiy switch tilga yangilik qo‘shmaydi deb hisoblab, uni uzoq vaqt kiritishmagan. Ammo Python 3.10 versiyasida (2021-yil) shunchaki switch emas, balki ancha kuchliroq bo‘lgan Strukturaviy andozalar moslashuvi (Structural Pattern Matching) — ya'ni match / case joriy qilindi. U nafaqat son va matnlarni, balki murakkab ro‘yxatlar, lug‘atlar va obyektlar tuzilishini ham bir zumda tahlil qila oladi!
case _ nima uchun pastki chiziq bilan yoziladi?
Pythonda _ (pastki chiziq) "menga bu qiymatning aniq nomi muhim emas, har qanday boshqa qiymat qabul qilinsin" degan ma'noni anglatadi. Dasturlashda bu wildcard deb ataladi. Agar siz case _: ni eng tepaga yozib qo‘ysangiz, barcha holatlar o‘sha yerda to‘xtab qoladi. Shuning uchun case _: har doim eng oxirida turishi shart.
Guard shartlari (case ... if)
match/case da variant ichida qo‘shimcha if shartini qo‘yish mumkin:
python
ball = 95
match ball:
case b if b >= 90:
print("A'lo darajali stipendiya!")
case b if b >= 70:
print("Oddiy stipendiya")
case _:
print("Stipendiya yo'q")Bu backendda buyurtmalar holatini tekshirishda juda qo‘l keladi.
Odatiy xatolar
- Eski Python versiyasida ishlatish: Agar kompyuteringizda Python 3.9 yoki undan eski versiya o‘rnatilgan bo‘lsa,
matchoperatori ishlamaydi (SyntaxErrorberadi). Albatta Python 3.10 yoki undan yuqori versiya kerak. casedan keyin ikki nuqtani unutish: Har bircaseqatori oxirida:bo‘lishi shart.
Atamalar lug'ati
| Atama | Ma'nosi |
|---|---|
| match / case | Python 3.10+ tanlash va andozalarni moslashtirish operatori |
| Pattern Matching | Ma'lumotlar andozasini solishtirish mexanizmi |
| Wildcard (_) | Har qanday boshqa holatni qamrab oluvchi belgi |
| Pipe ( | ) |
| Karrali son | Biror songa qoldiqsiz bo‘linadigan son |
| Menu routing | Foydalanuvchi buyrug‘iga qarab kerakli funksiyani ishga tushirish |
Bilasizmi?
- Telegram botlarda foydalanuvchi tugmalarni bosganda (masalan, "Katalog", "Sozlamalar", "Bog'lanish") keladigan buyruqlarni qayta ishlash uchun professional backend dasturchilar aynan
match / casedan foydalanishadi. - FastAPI va REST API tizimlarida HTTP status kodlarini (200, 201, 400, 404, 500) tahlil qilishda
match / caseeng qisqa va tezkor yechim hisoblanadi.
Topshiriqlar
1. Dastur menyusi (1.47-rasm) oson
Foydalanuvchi 1, 2 yoki 3 kiritadi:
- 1 →
"Dastur boshlandi" - 2 →
"Sozlamalar ochildi" - 3 →
"Dastur yopildi" - Boshqa →
"Noto'g'ri tanlov"dasturinimatch / casebilan yozing. Kutiladigan natija: Tanlangan raqamga mos xabar chiqishi.
2. Hafta kunlari (1.48-rasm) oson
1 dan 7 gacha raqam kiritilganda haftaning mos kunini (Dushanba...Yakshanba) chiqaruvchi dastur tuzing. Boshqa holatda "Xato! 1–7 oralig'ida kiriting" deb chiqarsin. Kutiladigan natija: 1 kiritilganda Dushanba chiqishi.
3. [1, n] 3 ga karrali sonlar (for bilan) oson
Foydalanuvchi n = 30 sonini kiritadi. for sikli yordamida 1 dan 30 gacha bo‘lgan barcha 3 ga bo‘linadigan sonlarni chiqaring. Kutiladigan natija: 3 6 9 12 15 18 21 24 27 30
4. [1, n] 3 ga karrali sonlar (while bilan) oson
Aynan 3-topshiriqni while sikli yordamida qayta yozing va natijalar bir xilligini tekshiring. Kutiladigan natija: 3 6 9 12 15 18 21 24 27 30
5. Oylar nomi (1.3-topshiriq) o'rta
Foydalanuvchi 1 dan 12 gacha bo‘lgan oy raqamini kiritganda tegishli oy nomini (Yanvar, Fevral, ..., Dekabr) chiqaruvchi to‘liq dasturni match / case orqali yozing. Kutiladigan natija: 10 kiritilganda Oktyabr chiqishi.
6. Fasllarni aniqlash o'rta
Oy raqamiga qarab faslni aniqlang (| operatoridan foydalaning):
- 12, 1, 2 →
"Qish" - 3, 4, 5 →
"Bahor" - 6, 7, 8 →
"Yoz" - 9, 10, 11 →
"Kuz"Kutiladigan natija: 4 kiritilgandaBahorchiqishi.
7. Ish kuni yoki dam olish kuni o'rta
Hafta kuni raqami berilgan (1–7). case 1 | 2 | 3 | 4 | 5: orqali "Ish kuni", case 6 | 7: orqali "Dam olish kuni" deb chiqaruvchi dastur yozing. Kutiladigan natija: 6 kiritilganda Dam olish kuni chiqishi.
8. Mini-kalkulyator o'rta
Foydalanuvchi ikkita son (a = 12, b = 4) va amal belgisini (amal = "*") kiritadi. match amal: yordamida +, -, *, / amallarini bajaruvchi kalkulyator dasturini tuzing. Kutiladigan natija: Natija: 48
9. [1, n] oralig‘idagi 3 ga va 5 ga karrali sonlar qiyin
[1, 100] oralig‘ida bir vaqtning o‘zida ham 3 ga, ham 5 ga bo‘linadigan (ya'ni 15 ga karrali) barcha sonlarni toping, ekranga chiqaring va ularning sonini hisoblang. Kutiladigan natija: 15 30 45 60 75 90 va Jami: 6 ta.
10. HTTP status kodlari routeri qiyin
Serverdan kelgan status kodi berilgan (status = 404):
- 200 →
"OK: Muvaffaqiyatli" - 201 →
"Created: Yangi obyekt yaratildi" - 400 →
"Bad Request: Noto'g'ri so'rov" - 403 →
"Forbidden: Ruxsat berilmagan" - 404 →
"Not Found: Sahifa topilmadi" - 500 →
"Internal Server Error: Server xatoligi" - Boshqa →
"Noma'lum status kodi"Kutiladigan natija: 404 kiritilgandaNot Found: Sahifa topilmadichiqishi.
11. To‘liq konsol menyusi (Interaktiv) bonus
while True: sikli ichida ishlovchi, foydalanuvchiga doimiy menyu ko‘rsatuvchi dastur tuzing:
- 1: Balansni tekshirish
- 2: Pul qo‘shish
- 3: Chiqish (
breakbilan dastur yopiladi) Har bir tanlovmatch / caseorqali boshqarilsin. Kutiladigan natija: To‘liq ishlovchi interaktiv bankomat/server konsol menyusi.
O'zingizni tekshiring
match / caseoperatoriningif-elif-elsedan qanday asosiy afzalliklari bor?case _:dagi pastki chiziq belgisi nima uchun kerak?- Bitta
caseda bir nechta qiymatni tekshirish uchun qaysi belgi ishlatiladi? - Nega
[1, n]oraliqdagi 3 ga karrali sonlarni chiqarish masalasidaforham,whileham ishlatilishi mumkin? matchoperatori Pythonning qaysi versiyasidan boshlab mavjud?- Qanday vaziyatlarda
match / caseo‘rniga baribirif-elifishlatish to‘g‘ri bo‘ladi?
Uyga vazifa
- Rasmiy qo‘llanmadagi barcha amaliy topshiriqlarni alohida fayllarga saqlang:
karrali_uch.py(3 ga karralilarni for va while bilan chiqarish);oylar.py(1 dan 12 gacha sonlarga qarab oy nomini match/case bilan chiqarish);kalkulyator.py(+, -, *, / amallarini match/case bilan hisoblash).
- Dasturlarni turli kiritmalar bilan sinab ko‘ring va 1-chorakning 3 haftalik mavzularini to‘liq takrorlang.
