10-dars: Satr — o'zgarmas
3-blokMa'lumotni saqlash9–12 darslar
Bu darsdan keyin siz
- satr indekslari va slicing bilan kerakli bo’lakni olasiz
- satr o’zgarmas ekanini tushunib, «o’zgartirish» o’rniga yangisini yasaysiz
- foydali satr metodlarini bilib ishlatasiz
Nazariya
“Nazariya” bo'limiga havolaSatr — belgilar ketma-ketligi
“Satr — belgilar ketma-ketligi” bo'limiga havolaSatr ham ro’yxatga o’xshab indekslanadi: s[0] birinchi belgi, s[-1] oxirgisi.
len(s) uzunlikni beradi, for ch in s esa belgilar bo’ylab yuradi.
o'zgarmasimmutable
Yaratilgandan keyin ichini o’zgartirish mumkin bo’lmagan obyekt. Satr, son va
tuple — o’zgarmas. «O’zgartirish» amalda yangi obyekt yasash bo’ladi.
Slicing — indekslar oynasi
“Slicing — indekslar oynasi” bo'limiga havolas[start:stop] — start dan boshlanadi, stop ga yetmaydi. Bu qoida g’alati
tuyuladi, lekin foydali: olinadigan belgilar soni aynan stop - start bo’ladi.
Uchinchi son — qadam: s[::2] har ikkinchi belgini oladi, s[::-1] satrni teskari
qiladi.
raqam = "998901234567"print(raqam[:3]) # 998print(raqam[3:5]) # 90print(raqam[-2:]) # 67print(raqam[::-1]) # 765432109899Satrni o’zgartirib bo’lmaydi
“Satrni o’zgartirib bo’lmaydi” bo'limiga havolas[0] = "A" xato beradi. Ro’yxatda bu ishlaydi, satrda esa yo’q — chunki satr
o’zgarmas. Buning o’rniga yangi satr yasaladi.
s = "python"# s[0] = "P" <- TypeErrors = "P" + s[1:] # yangi satr yasadikprint(s) # PythonFoydali metodlar
“Foydali metodlar” bo'limiga havolaupper(), lower() — registr; strip() — chetdagi bo’shliqlarni tozalaydi;
split() — bo’laklarga ajratadi va ro’yxat qaytaradi; join() — teskarisi;
replace() — almashtiradi. Hammasi yangi satr qaytaradi, aslini o’zgartirmaydi.
toliq = " Aziza Karimova "toza = toliq.strip()qismlar = toza.split(" ")print(qismlar) # ['Aziza', 'Karimova']print(qismlar[1].upper()) # KARIMOVAprint("-".join(qismlar)) # Aziza-KarimovaBir belgi — bir bayt emas
“Bir belgi — bir bayt emas” bo'limiga havolalen("salom") → 5, lekin len("o'g'il") — o’zbek lotinidagi o' ikki belgidan
iborat (harf va tutuq belgisi). Bayt darajasida esa yana boshqacha —
CF 4-darsdagi Unicode buni batafsil tushuntiradi.
Xulosa: len() belgilarni sanaydi, baytlarni emas.
Bashorat qiling
“Bashorat qiling” bo'limiga havolaAvval o'ylang: bu kod nima chiqaradi? Ishga tushirishdan oldin yozing.
s = "PYTHON"print(s[1:4])print(s[-1])print(len(s))Haqiqiy natija:
YTH N 6
s[1:4] indeks 1, 2, 3 ni oladi — 4 kirmaydi, shuning uchun 3 belgi. s[-1] oxirgi belgi.
Javobni ko'rish
YTH N 6
s[1:4] indeks 1, 2, 3 ni oladi — 4 kirmaydi, shuning uchun 3 belgi. s[-1] oxirgi belgi.
Avval o'ylang: bu kod nima chiqaradi? Ishga tushirishdan oldin yozing.
s = "salom"t = s.upper()print(s)print(t)Haqiqiy natija:
salom SALOM
upper() aslini o'zgartirmaydi — yangi satr qaytaradi. Shu sababli s hamon kichik harflarda.
Javobni ko'rish
salom SALOM
upper() aslini o'zgartirmaydi — yangi satr qaytaradi. Shu sababli s hamon kichik harflarda.
Sinab ko’r
“Sinab ko’r” bo'limiga havolastart, stop va step ni suring. stop ning kirmasligini alohida sinab ko’ring:
start ni stop dan katta qilsangiz nima bo’ladi?
Slicing maydoni
start, stop va step ni suring — qaysi belgilar tanlanayotganini kuzating.
Bu simulyatorda PYTHON satri ustida slicing ishlatiladi: start, stop vastep ni o'zgartirib, s[start:stop:step] qanday natija berishini ko'rasiz. Indekslar har belgi ostida yozilgan.
JavaScript'siz sinash: daftarga P Y T H O N deb yozing va har belgi ostiga 0, 1, 2, 3, 4, 5 raqamlarini qo'ying. Keyin ustiga −6, −5, −4, −3, −2, −1 raqamlarini ham yozib chiqing. s[1:4] qaysi belgilarni oladi?
Xatoni toping
“Xatoni toping” bo'limiga havolaBu kod ataylab buzuq — xatoni toping
ism = "aziza"ism[0] = "A"print(ism)Python shunday javob beradi:
Traceback (most recent call last): File "ism.py", line 2, in <module> ism[0] = "A" TypeError: 'str' object does not support item assignment
Sababi va tuzatish
Satr o'zgarmas: uning ichidagi belgini almashtirib bo'lmaydi. Xato xabari ham shuni aytadi — «item assignment» qo'llanmaydi.
To’g’ri yo’llar: ism = "A" + ism[1:] yoki tayyor metod bilan
ism = ism.capitalize(). Ikkalasi ham yangi satr yasab, yorliqni unga ko’chiradi.
O’zingizni sinang
“O’zingizni sinang” bo'limiga havola1s = 'PYTHON' bo'lsa s[1:4] nima beradi va nechta belgi?
Javobni ko'rish
YTH — uch belgi. Indeks 1, 2, 3 olinadi, 4 kirmaydi. Belgilar soni
stop − start ga teng.
2Nega s[0] = 'A' xato beradi, royxat[0] = 'A' esa ishlaydi?
Javobni ko'rish
Satr o’zgarmas (immutable), ro’yxat o’zgaruvchan (mutable). Satrni o’zgartirish uchun yangisini yasash kerak.
3s[::-1] nima qiladi?
Javobni ko'rish
Satrni teskari qaytaradi. Qadam −1 — oxiridan boshiga qarab yuradi.
4'Aziza Karimova'.split(' ') natijasi qanday turda va nima?
Javobni ko'rish
Ro’yxat: [‘Aziza’, ‘Karimova’]. split satrni bo’lib
ro’yxat qaytaradi.
5upper() chaqirilgandan keyin asl satr o'zgaradimi?
Javobni ko'rish
Yo’q. Barcha satr metodlari yangi satr qaytaradi. Natijani saqlamoqchi bo’lsangiz,
uni o’zgaruvchiga bog’lash kerak: s = s.upper().
Topshiriq
“Topshiriq” bo'limiga havolaTopshiriq — darajangizni tanlang
Asos · 5–7-sinf — Vizual va aniq ko'rsatmali
To’liq ismingizni bitta satrga yozing va: birinchi harfini, oxirgi harfini,
uzunligini, katta harflardagi ko’rinishini va teskarisini chiqaring. Keyin
s[0] = "X" yozib ishga tushiring — chiqqan xatoni daftarga ko’chirib olib,
nega shunday bo’lganini bir gapda yozing.
Mustahkam · 8–9-sinf — Matnli masala, o'zingiz tuzasiz
Telefon raqamini formatlovchi programma yozing: 998901234567 kiritilsa,
+998 90 123 45 67 chiqarsin. Faqat slicing va satr ulash ishlatiladi.
Keyin teskari vazifa: formatlangan raqamdan barcha bo’shliq va + ni olib
tashlab, faqat raqamlarni qoldiring (replace yordam beradi).
Chuqur · 10–11-sinf — Algoritmik, chegara holatlari bilan
Satr palindrom ekanini tekshiruvchi programma yozing — bo’shliq, tinish belgisi
va registrni hisobga olmasin («A roza upala na lapu Azora» → True). Ikki
yechim yozing: biri [::-1] bilan, ikkinchisi ikki indeks bilan (boshidan va
oxiridan qarab yurish). Qaysi biri kamroq xotira ishlatadi va nega — izohlang.
Chegara holatlari: bo’sh satr, bitta belgi, faqat tinish belgilari.
Darsni belgilash uchun JavaScript kerak. Bu progressni saqlash uchun ishlatiladi — darslikning o'zi JavaScript'siz ham to'liq o'qiladi.