03-dars
Kodni tashkil etish va «kalit-qiymat» strukturalari
Oʻtilgan mavzular
1-dars, esda tutamiz
Har bir qiymatning oʻz turi bor. Python uni avtomatik aniqlaydi.
1-dars, esda tutamiz
input() doim satr qaytaradi. Son uchun int() yoki float() kerak.
1-dars, esda tutamiz
Har xil holatlar uchun har xil tarmoqlar. f-string qiymatlarni matnga qoʻshadi.
2-dars, esda tutamiz
Maʼlum marta takrorlash. range(1, 6) 1..5 ni beradi (6 siz).
Hayotda
Oʻquv misol emas: avtomatizatsiya sikl orqali deploydan keyin xizmat ishlayotganini tekshiradi.
for i in 1 2 3 4 5; do ... done - shu konstruksiya monitoring, retry, migratsiya testlari va yuzlab boshqa narsalarga asos boʻladi.
2-dars, esda tutamiz
Tartiblangan kolleksiya. Indeksatsiya noldan. Kesmalar ikki nuqta orqali.
2-dars, esda tutamiz
continue: iteratsiyani oʻtkazib yuborish. break: sikldan chiqish.
Bugun
Bu nima?
Yaratilgandan keyin oʻzgarmaydigan tartiblangan kolleksiya. Qatʼiy toʻplamlar uchun: koordinatalar (x, y), RGB rang, sana (yil, oy, kun). Funksiya bir nechta qiymat qaytarsa, Python ularni kortej qilib qaytaradi.
Nima uchun?
List bor ekan, nega tuple kerak? Oʻzgarmaslik - bu kamchilik emas, bu himoya.
Toʻplam qatʼiy boʻlsa (koordinatalar, RGB, sana) → tuple. Oʻzgaruvchan boʻlsa → list.
1-misol
Natijani bashorat qiling. → tugmasini bosing javob uchun.
Indeks noldan boshlanadi, listdagi kabi. capitals[-1] - oxirgi element.
2-misol
Natijani bashorat qiling. → tugmasini bosing javob uchun.
len() har qanday kolleksiya bilan ishlaydi: tuple, list, set, dict, str.
3-misol
Elementni qayta yozsak nima boʻladi? → tugmasini bosing javob uchun.
Bu feature, bug emas: tuple ni tasodifan buzib boʻlmaydi. Yangi qiymat kerak boʻlsa - yangi tuple yarating.
Bu nima?
Matematikadan struktura: noyob elementlar tartibsiz toʻplami. Python dublikatlarni avtomatik olib tashlaydi. Asosiy quvvati - x in set tekshiruvi O(1) tezligida, hatto millionlab elementda ham bir lahzada.
Motivatsiya
Tez qidirish · dedupliksiya · toʻplam algebra
Takrorlarni bir qatorda olib tashlash: list(set(items)).
x in set - O(1), roʻyxatda O(n).
Kesishma, birlashma, ayirma - bitta qator, siklsiz.
1-misol
Python takror "python" bilan nima qiladi? → tugmasini bosing javob uchun.
Ikkinchi "python" yoʻq - set jim-jit dublikatni olib tashladi. Tartib kafolatlanmagan.
2-misol
4 ta element yozdik - nechta qoladi? → tugmasini bosing javob uchun.
4 emas, 3 - set faqat noyoblarni sanaydi. «Roʻyxatda nechta turli qiymat bor» degan savolga tez javob.
3-misol
x in set nimani qaytaradi? → tugmasini bosing javob uchun.
Set ichidagi qidiruv - O(1). Roʻyxatda esa O(n) - million elementda farq juda katta.
Amallar
| Amal | Maʼnosi | Misol |
|---|---|---|
| a | b | Birlashma | {1,2,3} | {3,4} → {1,2,3,4} |
| a & b | Kesishma | {1,2,3} & {2,3,4} → {2,3} |
| a - b | Ayirma | {1,2,3} - {2,3} → {1} |
| a ^ b | Simmetrik ayirma | {1,2,3} ^ {2,3,4} → {1,4} |
Roʻyxatdan dublikatlarni oʻchirish: list(set(items)) - tartib yoʻqoladi.
Bu nima?
Kalit (ism, ID, sana) bilan qiymat (har qanday obyekt) oʻrtasidagi bogʻlanish. Kalit boʻyicha murojaat - O(1) tezlikda. Bu Pythonning asosiy kolleksiyasi: JSON javoblar, konfiglar, keshlar, funksiya parametrlari - hammasi ichida dict.
Motivatsiya
Dict - Pythonning asosiy kolleksiyasi. JSON, konfiglar, API, keshlar - ichida hammasi dict.
Telefon kitobi: ism → raqam. Murojaat O(1), saralash emas.
API javoblari, konfiglar, saqlash - JSON obertkasida dict.
10 if-elif shoxi → bitta d[key].
1-misol
Natijani bashorat qiling. → tugmasini bosing javob uchun.
Kvadrat qavslarda kalit, list kabi - lekin nomli: d["name"].
2-misol
Natijani bashorat qiling. → tugmasini bosing javob uchun.
len(d) - juftliklar soni (kalit, qiymat). Kalitlar yoki qiymatlarning emas - bu bir xil son.
3-misol
in nimani tekshiradi - kalitni yoki qiymatni? → tugmasini bosing javob uchun.
Faqat kalitlar! "Alisa" - qiymat, uni in user.values() orqali qidirish kerak.
Murojaat
Ifoda ustiga bosing - natijani koʻring:
d[k] mavjud boʻlmagan kalitga KeyError beradi. .get() esa None yoki standart qiymatni qaytaradi.
Aylantirish
Savol
«Shahar → aholi» juftliklarini tez izlash bilan saqlash
list - tartiblangan roʻyxattuple - oʻzgarmasset - noyob elementlardict - kalit-qiymatBir daqiqa oʻylab koʻring →
Javob
«Shahar → aholi» - aynan lugʻat uchun yaratilgan stsenariy.
list yozuvni O(n) da topgan boʻlardi. set faqat qiymatlarni, bogʻliqliksiz saqlaydi. tuple - oʻzgarmas. dict - haqiqatan ham key → value uchun yaratilgan yagona tur.
Shpargalka
| Tur | Oʻzgaruvchan | Tartiblangan | Dublikatlar | Asosiy stsenariy |
|---|---|---|---|---|
| list [] | ha | ha | ha | kengayuvchi ketma-ketlik |
| tuple () | yoʻq | ha | ha | qatʼiy toʻplam |
| set {} | ha | yoʻq | yoʻq | noyob + tez qidirish |
| dict {k:v} | ha | ha (3.7+) | kalitlar noyob | nom/kalit boʻyicha qidirish |
«Nom boʻyicha qidirish?» → dict. «Noyob qiymatlar, tez in?» → set. «Oʻzgaradi?» → list. «Oʻzgarmaydi?» → tuple.
Yarmidamiz
5–10 daqiqa
☕ Qahva, dam olish, savollar - funksiyalar bilan yana koʻrishamiz
Motivatsiya
Funksiyasiz 10 000 qatorli kod doʻzaxga aylanadi. Funksiya - nomlangan kod bloki oʻz dunyosi bilan.
Logikani bir marta yozdik - ming marta ishlatamiz. Bir joyda tuzatdik - hamma joyda.
Oʻz-oʻzini hujjatlaydi: calc_tax(...) 5 qatorli formuladan tushunarli.
Oʻz scope. Lokal nomlar tashqariga oqib chiqmaydi. Tashqaridan buzib boʻlmaydi.
Funksiyasiz vs funksiya bilan
Chapda - dublikatsiya doʻzaxi. Oʻngda - qayta ishlatiladigan kod.
Soliq oʻzgardi? Chap kodda - 50 ta tuzatish, birortasini unutish oson. Oʻng kodda - bir qator.
Sintaksis
Funksiyani eʼlon qilish - uni qanday chaqirishni tasvirlash
Bosqichma-bosqich
«Ishga tushirish»ni bosing - har bir qadam navbatma-navbat paydo boʻladi
| Qadam | Amal | Qiymat |
|---|---|---|
| 1 | square(4) chaqiriladi | n = 4 |
| 2 | n * n | 16 |
| 3 | result = 16 | result = 16 |
| 4 | return result | → 16 |
| 5 | x = 16 | x = 16 |
return
return funksiyani yakunlaydi. Bir nechta qiymat tuple sifatida qaytariladi va alohida oʻzgaruvchilarga ajratiladi.
Ixtiyoriy
Ism va salomni kiriting - maydon boʻsh boʻlsa, standart qiymat ishlaydi
Standart qiymatli parametrlar funksiya sinaturasida oddiylaridan keyin keladi.
Tuzoq #1
Default bir marta hisoblanadi - funksiya eʼlon qilinganda, har chaqiruvda emas
«Oʻqituvchining bitta umumiy daftari» vs «har bir oʻquvchiga yangi varaq». Hech qachon [], {}, set() ni default sifatida ishlatmang.
Pozitsion
Slayder bilan oʻynang - argumentlar tuple ichiga joylanishini koʻring
Nomli
Maydonlar qoʻshib koʻring - kwargs ularni dict ichiga oladi
Parametrlar tartibi
Qatʼiy tartib: oddiy → defaults → *args → keyword-only → **kwargs
*args dan keyingi barcha argumentlar - keyword-only. status ni faqat nom bilan berish mumkin - aks holda qiymat args ga tushardi.
f(*lst, **dct) - bir xil * va ** teskari ishlaydi: list va dict ni argumentlar sifatida ochish.
Cho‘kishdan oldin
10 000 qatorli loyihani tasavvur qiling. Agar barcha oʻzgaruvchilar global boʻlsa, doʻzax 10-qatordan boshlanardi.
i, temp, result ni ikki marta ishlatib boʻlmaydii ichida f() ≠ i ichida g()Scope - bir tomonlama oynali deraza. Funksiya ichidan tashqi dunyo (global) koʻrinadi. Tashqaridan lokal oʻzgaruvchilarga kira olmaysiz.
Koʻrinish
Nom ustiga bosing - Python uni LEGB qoidasi boʻyicha qidiradi
Qoidalar
Python nomni shu ketma-ketlikda qidiradi
| Daraja | Qayerda |
|---|---|
| L · Local | Joriy funksiya ichida |
| E · Enclosing | Tashqi funksiya (agar ichma-ich boʻlsa) |
| G · Global | Modul darajasida |
| B · Built-in | Oʻrnatilgan: print, len, range... |
Funksiya ichida x = 5 deb yozsangiz, hatto global x boʻlsa ham, yangi local x yaratiladi.
Tashqi scope ga yozish
Oʻqish tashqi scope ni koʻradi. Yozish - faqat lokal. Tashqi oʻzgaruvchini yozish uchun kalit soʻzlar kerak.
UnboundLocalError chiqadi - Python funksiya tanasida oʻzlashtirishni koʻrishi bilan oʻzgaruvchini lokal deb hisoblaydi. global aniq aytadi «lokal yaratma, globalga yoz».
Qisqa
Bir qatorli, nomsiz qisqa funksiya
Sintaksis: lambda argumentlar: ifoda. Faqat bitta ifoda, return yozilmaydi.
Yaxshi did chegarasi
Lambda qisqa ifodalar uchun ideal. Logika murakkab boʻlsa - def yozing. Kod odamlar uchun yoziladi.
Lambda 50–60 belgidan uzun yoki shartli boʻlsa - def ga qayta yozing. Funksiya nomi = tekin hujjat.
Qoʻllash
Tugmani bosing - kartochkalar oʻrnini fizik almashtiradi
Tuzoq #2
Lambda oʻzgaruvchining nomini eslab qoladi, yaratilgan paytdagi qiymatini emas
Uchchala lambda chaqirilgan paytda sikl tugab boʻlgan va i = 2. Hammasi bir nomga qaraydi.
Savol
15 / 25 / 1015 / 25 / 215 / 25 / Error15 / 20 / 10Bir daqiqa oʻylab koʻring →
1-amaliyot
Yechim
2-amaliyot
Maslahat: scores.items() → juftliklar; teskari tartib uchun reverse=True.
Yechim
Oʻzingiz oʻynab koʻring
Kodni oʻzgartiring va «Ishga tushirish»ni bosing - bu Pyodide orqali ishlaydigan haqiqiy Python
Amaliy topshiriqlar
Dars mavzulari boʻyicha 10 ta topshiriq. Jupyter yoki VS Code orqali oching va mustaqil bajaring.
Yakun
Modullar, fayllar va xatoliklar - maʼlumot oʻqish/yozish va try/except
Telegram: @gokalqurt