2-dars: O'zgaruvchi — yorliq, quti emas
1-blokMashina buyruqni qanday tushunadi1–4 darslar
Bu darsdan keyin siz
- o’zgaruvchini to’g’ri nomlab, qiymat bog’lashni bilasiz
a = bnima qilishini (va nima QILMASLIGINI) tushuntirasizid()yordamida ikki nom bitta obyektga qarayotganini isbotlaysiz
Nazariya
“Nazariya” bo'limiga havolaYorliq metaforasi
“Yorliq metaforasi” bo'limiga havolaKo’p kitobda o’zgaruvchi “quti” deb tushuntiriladi: qiymat quti ichida yotadi. Bu metafora Python’da noto’g’ri va keyinroq katta chalkashlik keltiradi. Python’da o’zgaruvchi — obyektga osilgan yorliq, chamadonga bog’langan nom kartochkasi.
o'zgaruvchivariable
Xotiradagi obyektga berilgan nom. Obyekt xotirada yashaydi, nom esa unga ishora qiladi. Bitta obyektga bir nechta nom osilishi mumkin.
Bog’lash chapdan o’ngga emas
“Bog’lash chapdan o’ngga emas” bo'limiga havolanarx = 5000 qatorini o’ng tomondan o’qing: avval 5000 obyekti yasaladi, keyin unga
narx yorlig’i osiladi. Shu sababli narx = narx + 1000 sirli emas: o’ng tomon
hisoblanadi (6000 chiqadi), keyin yorliq yangi obyektga ko’chadi.
narx = 5000chegirma = narx # yangi son yasalmadi, ikkinchi yorliq osildiprint(id(narx)) # 140251...print(id(chegirma)) # aynan shu raqam!id() obyektning xotiradagi manzilini beradi — bu
CF 13-darsdagi xotira manzili bilan aynan bir
narsa. Manzillar teng bo’lsa, ikki nom bitta obyektga qarayapti.
Nomlash qoidalari
“Nomlash qoidalari” bo'limiga havolaNom harf yoki pastki chiziq bilan boshlanadi, ichida raqam bo’lishi mumkin, bo’shliq
bo’lmaydi. Katta-kichik harf farqlanadi: narx va Narx — ikki xil nom.
Yaxshi nom kodni izohsiz tushunarli qiladi: n emas narx, x emas oquvchi_soni.
Kirill harf ishlatilmaydi, print yoki input kabi tayyor nomlar band qilinmaydi.
Bashorat qiling
“Bashorat qiling” bo'limiga havolaAvval o'ylang: bu kod nima chiqaradi? Ishga tushirishdan oldin yozing.
a = 10b = aa = 20print(a, b)Haqiqiy natija:
20 10
b = a bajarilganda b 10 obyektiga bog'landi. Keyin a boshqa obyektga ko'chdi, lekin b hech qayoqqa ketmadi — u hamon 10 ga qarab turadi.
Javobni ko'rish
20 10
b = a bajarilganda b 10 obyektiga bog'landi. Keyin a boshqa obyektga ko'chdi, lekin b hech qayoqqa ketmadi — u hamon 10 ga qarab turadi.
Avval o'ylang: bu kod nima chiqaradi? Ishga tushirishdan oldin yozing.
son = 7son = son * 2son = son + 1print(son)Haqiqiy natija:
15
Har qatorda o'ng tomon avval hisoblanadi: 7*2=14, keyin 14+1=15. Yorliq har marta yangi obyektga ko'chadi.
Javobni ko'rish
15
Har qatorda o'ng tomon avval hisoblanadi: 7*2=14, keyin 14+1=15. Yorliq har marta yangi obyektga ko'chadi.
Sinab ko’r
“Sinab ko’r” bo'limiga havolaKodni qadam-qadam bajarib, xotirada aynan nima o’zgarayotganini kuzating. Ikki yorliq bitta obyektga qaragan qadamga alohida e’tibor bering.
Xotira surati
Har qadamda xotirada nima o'zgarganini kuzatib boring. Klaviatura: → keyingi qadam, ← orqaga.
Bu simulyator besh qatorli kodni qadam-qadam bajaradi va har qadamda xotirani ko'rsatadi: chapda o'zgaruvchi nomlari, o'ngda sonlar. Strelka qaysi nom qaysi sonni ko'rsatayotganini bildiradi.
JavaScript'siz sinash: daftarga ikki ustun chizing. Chapga narx va chegirmanomlarini, o'ngga sonlarni yozing. Har kod qatoridan keyin strelkani qayta chizing —chegirma = narx da ikki strelka bitta songa borishini ko'rasiz.
Kod
- narx = 5000
- chegirma = narx
- chegirma = 4000
- narx = narx + 1000
- print(narx, chegirma)
Xotira
«Keyingi qadam» tugmasini bosib boshlang.
Xatoni toping
“Xatoni toping” bo'limiga havolaBu kod ataylab buzuq — xatoni toping
jami = soni * narxsoni = 3narx = 1500print(jami)Python shunday javob beradi:
Traceback (most recent call last): File "hisob.py", line 1, in <module> jami = soni * narx NameError: name 'soni' is not defined
Sababi va tuzatish
Birinchi qatorda soni hali mavjud emas. Interpretator qatorlarni yuqoridan pastga bajaradi — kelajakdagi qatorlarni oldindan ko'rmaydi.
To’g’risi: avval soni va narx ga qiymat bering, jami ni undan keyin hisoblang.
Bu xato yozganda emas, ishga tushirganda chiqadi — 1-darsdagi qoida: interpretator
qatorma-qator ishlaydi.
O’zingizni sinang
“O’zingizni sinang” bo'limiga havola1Nega o'zgaruvchini 'quti' deb tasavvur qilish noto'g'ri?
Javobni ko'rish
Quti metaforasi qiymat o’zgaruvchi ichida yotadi deb o’ylashga majbur qiladi. Aslida qiymat xotirada alohida obyekt, o’zgaruvchi esa unga osilgan yorliq — shuning uchun bitta obyektga bir nechta nom osilishi mumkin.
2a = 5, b = a bajarildi. id(a) va id(b) teng bo'ladimi?
Javobni ko'rish
Ha, teng. b = a yangi son yasamadi, faqat ikkinchi yorliqni xuddi shu
obyektga osdi.
3x = 3 dan keyin x = x + 1 yozildi. Bu matematikada mumkinmi va Python'da nima bo'ladi?
Javobni ko'rish
Matematikada x = x + 1 ma’nosiz tenglama. Python’da esa bu buyruq:
o’ng tomonni hisobla (3+1=4) va x yorlig’ini yangi obyektga ko’chir.
4Qaysi nomlar to'g'ri: oquvchi_soni, 2sinf, print, narx-jami, Narx?
Javobni ko'rish
oquvchi_soni va Narx to’g’ri. 2sinf raqam bilan
boshlangan, narx-jami da chiziqcha bor (ayirish belgisi), print
esa tayyor funksiya nomini bosib qoladi.
5Nima uchun o'zgaruvchi ishlatish narxni 12 joyda yozishdan yaxshi?
Javobni ko'rish
O’zgarish bitta joyda bo’ladi — xato qilish ehtimoli 12 barobar kamayadi. Kod
o’qilishi ham osonlashadi: narx so’zi 12000 raqamidan
ko’proq ma’no beradi.
Topshiriq
“Topshiriq” bo'limiga havolaTopshiriq — darajangizni tanlang
Asos · 5–7-sinf — Vizual va aniq ko'rsatmali
men.py faylida to’rt o’zgaruvchi yarating: ism, yosh, sinf, shahar.
Har birini print bilan chiqaring. Keyin yosh ga 1 qo’shib yangi qatorda
chiqaring va eski qiymat o’zgarganini tekshiring. Daftarga yorliq-obyekt
sxemasini chizib keling.
Mustahkam · 8–9-sinf — Matnli masala, o'zingiz tuzasiz
Do’kon hisobi: narx, soni, chegirma_foizi o’zgaruvchilari orqali yakuniy
summani hisoblab chiqaruvchi programma yozing. Keyin faqat narx ni o’zgartirib
ishga tushiring — hisob o’zi qayta hisoblanishi kerak. Kodda birorta ham
“qo’lda yozilgan” son qolmasin.
Chuqur · 10–11-sinf — Algoritmik, chegara holatlari bilan
a = 256, b = 256 va a = 1000, b = 1000 juftliklari uchun id(a) == id(b)
ni tekshirib ko’ring. Natijalar farq qiladi — nega? (Kalit so’z: Python kichik
sonlarni oldindan yasab qo’yadi.) Kuzatganingizni bir paragrafda tushuntiring va
bundan is bilan == farqi haqida qanday xulosa chiqarish mumkinligini yozing —
bu 20-darsda AI kodini tekshirishda kerak bo’ladi.
Darsni belgilash uchun JavaScript kerak. Bu progressni saqlash uchun ishlatiladi — darslikning o'zi JavaScript'siz ham to'liq o'qiladi.