Asosiy mazmunga o'tish

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

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

s[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.py
raqam = "998901234567"print(raqam[:3])      # 998print(raqam[3:5])     # 90print(raqam[-2:])     # 67print(raqam[::-1])    # 765432109899

s[0] = "A" xato beradi. Ro’yxatda bu ishlaydi, satrda esa yo’q — chunki satr o’zgarmas. Buning o’rniga yangi satr yasaladi.

ozgartirish.py
s = "python"# s[0] = "P"  <- TypeErrors = "P" + s[1:]    # yangi satr yasadikprint(s)           # Python

upper(), 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.

ism.py
toliq = "  Aziza Karimova  "toza = toliq.strip()qismlar = toza.split(" ")print(qismlar)               # ['Aziza', 'Karimova']print(qismlar[1].upper())    # KARIMOVAprint("-".join(qismlar))     # Aziza-Karimova

len("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.

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

Bashorat qiling
s = "PYTHON"print(s[1:4])print(s[-1])print(len(s))
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.

Bashorat qiling
s = "salom"t = s.upper()print(s)print(t)
Javobni ko'rish
salom
SALOM

upper() aslini o'zgartirmaydi — yangi satr qaytaradi. Shu sababli s hamon kichik harflarda.

start, 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?

P
Y
T
H
O
N

Bu kod ataylab buzuq — xatoni toping

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

1s = '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 — 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.