Asosiy mazmunga o'tish

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 = b nima qilishini (va nima QILMASLIGINI) tushuntirasiz
  • id() yordamida ikki nom bitta obyektga qarayotganini isbotlaysiz

Ko’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.

narx = 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.py
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.

Nom 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.

Avval o'ylang: bu kod nima chiqaradi? Ishga tushirishdan oldin yozing.

Bashorat qiling
a = 10b = aa = 20print(a, b)
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.

Bashorat qiling
son = 7son = son * 2son = son + 1print(son)
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.

Kodni 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

  1. narx = 5000
  2. chegirma = narx
  3. chegirma = 4000
  4. narx = narx + 1000
  5. print(narx, chegirma)

Xotira

narx
chegirma
id: —
id: —
id: —

«Keyingi qadam» tugmasini bosib boshlang.

Bu kod ataylab buzuq — xatoni toping

Buzuq kod
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.

1Nega 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 — 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.