Satr nima?
Dasturlarda biz doimo matn bilan işlaymiz: foydalanuvçi ismi, manzil, SMS matni, mahsulot nomi. Pythonʼda matnni saqlaydigan maʼlumot turi satr deb ataladi va uning nomi str (inglizça string sözidan).
Satr — bu belgilar ketma-ketligi. Har bir harf, raqam, böş joy va tiniş belgisi alohida belgi hisoblanadi. Satrni yaratiş uçun matnni qöştirnoq yoki bittalik tirnoq içiga yozasiz.
Satr yaratiş
Pythonʼda bittalik ('...') va qöştirnoq ("...") mutlaqo bir xil işlaydi. Qaysi birini tanlaş — odat masalasi. Lekin matn içida tirnoq bölsa, boşqa turini tanlaş qulay.
shahar = "Samarqand"
mahsulot = 'Non'
gap = "U menga 'Rahmat' dedi."
izoh = 'Kitobning nomi "Keça va kunduz".'
print(shahar)
print(mahsulot)
print(gap)
print(izoh)
print(type(shahar))
Natija:
Samarqand
Non
U menga 'Rahmat' dedi.
Kitobning nomi "Keça va kunduz".
<class 'str'>
Bir neça qatorli matn kerak bölsa, uçtalik tirnoq ("""...""" yoki '''...''') işlatiladi. Bunda qator köçişlari matnning bir qismi bölib qoladi.
elon = """Diqqat!
Ertaga soat 10:00 da
bozor yopiq böladi."""
print(elon)
Natija:
Diqqat!
Ertaga soat 10:00 da
bozor yopiq böladi.
Indekslaş: belgini oliş
Satrdagi har bir belgining öz tartib raqami — indeksi bor. Indeks 0 dan boşlanadi, yaʼni birinçi belgi [0], ikkinçisi [1] va hokazo.
Pythonʼda manfiy indekslar ham bor: [-1] — oxirgi belgi, [-2] — oxiridan ikkinçisi. Bu juda qulay, çunki satr uzunligini bilmasdan ham oxirgi belgini oliş mumkin.
| Belgi | P | y | t | h | o | n |
|---|---|---|---|---|---|---|
| Musbat indeks | 0 | 1 | 2 | 3 | 4 | 5 |
| Manfiy indeks | -6 | -5 | -4 | -3 | -2 | -1 |
til = "Python"
print(til[0])
print(til[3])
print(til[-1])
print(til[-2])
print(len(til))
Natija:
P
h
n
o
6
len() funksiyasi satrdagi belgilar sonini qaytaradi. Eʼtibor bering: oxirgi belgining indeksi len(til) - 1 ga teng. Mavjud bölmagan indeksni sörasangiz, Python IndexError xatosini beradi.
Kesiş (slicing)
Satrning bir bölagini oliş uçun kesiş işlatiladi: satr[boshi:oxiri]. Bu yerda boshi kiradi, oxiri esa kirmaydi. Agar boshi yozilmasa — boşidan, oxiri yozilmasa — oxirigaça olinadi.
Uçinçi parametr — qadam: satr[boshi:oxiri:qadam]. Qadam 2 bölsa, har ikkinçi belgi olinadi. Qadam manfiy bölsa, satr teskari tomonga öqiladi.
soz = "Samarqand"
print(soz[0:5])
print(soz[5:])
print(soz[:3])
print(soz[-4:])
print(soz[::2])
print(soz[::-1])
Natija:
Samar
qand
Sam
qand
Smrad
dnaqramaS
[::-1] — satrni teskari aylantirişning eng qisqa usuli. U palindromlarni (oldidan ham, orqasidan ham bir xil öqiladigan sözlarni, masalan, "kiyik") tekşirişda qöl keladi — buni maşqlarda sinab körasiz.
Satrlar özgarmas
Satr yaratilgandan keyin uning içidagi belgini özgartirib bölmaydi. Bu xususiyat özgarmaslik (inglizça immutable) deyiladi.
ism = "Kamola"
try:
ism[0] = "J"
except TypeError as xato:
print("Xato:", xato)
# Töğri yöl: yangi satr yasaş
ism = "J" + ism[1:]
print(ism)
Natija:
Xato: 'str' object does not support item assignment
Jamola
Nega bunday? Özgarmas obyektlar xavfsizroq: satrni funksiyaga bersangiz, funksiya uni jimgina buzib qöya olmaydi. Şuningdek, Python özgarmas obyektlar bilan tezroq işlaydi. Barça satr metodlari (upper(), replace() va boşqalar) asl satrni emas, yangi satr qaytaradi — buni yodda tuting.
Birlaştiriş, takrorlaş va in
Satrlarni + bilan qöşiş, * bilan takrorlaş mumkin. in operatori esa bir satr boşqasining içida bormi-yöqligini tekşiradi va True yoki False qaytaradi.
ism = "Aziz"
familiya = "Karimov"
toliq = ism + " " + familiya
print(toliq)
chiziq = "=" * 20
print(chiziq)
print("Kar" in familiya)
print("kar" in familiya)
print("x" not in familiya)
Natija:
Aziz Karimov
====================
True
False
True
in katta-kiçik harfni farqlaydi: "Kar" topildi, "kar" esa yöq. Raqamni satrga qöşmoqçi bölsangiz, "Yosh: " + 25 xato beradi. Buning örniga f-satr işlating: f"Yosh: {25}".
Eng foydali metodlar
Metod — bu obyektga tegişli funksiya. U nuqta orqali çaqiriladi: satr.metod(). Quyida kundalik işda eng köp kerak böladiganlarini guruhlab körib çiqamiz.
Harflar registri
| Metod | Nima qiladi |
|---|---|
upper() | hamma harfni katta qiladi |
lower() | hamma harfni kiçik qiladi |
title() | har bir sözning birinçi harfini katta qiladi |
capitalize() | faqat butun matnning birinçi harfini katta qiladi |
matn = "buxoro qadimiy ŞAHAR"
print(matn.upper())
print(matn.lower())
print(matn.title())
print(matn.capitalize())
Natija:
BUXORO QADIMIY ŞAHAR
buxoro qadimiy şahar
Buxoro Qadimiy Şahar
Buxoro qadimiy şahar
lower() ayniqsa soliştirişda foydali: foydalanuvçi "HA", "Ha" yoki "ha" deb yozsa ham, javob.lower() == "ha" hammasini töğri tuşunadi.
Böş joylarni olib taşlaş
Foydalanuvçi matn kiritganda köpinça boşida yoki oxirida ortiqça böş joy qolib ketadi. strip() ikki tomondan, lstrip() faqat çapdan, rstrip() faqat öngdan tozalaydi. Qavs içida qaysi belgilarni olib taşlaşni ham körsatiş mumkin.
kiritilgan = " salom dunyo "
print(f"[{kiritilgan.strip()}]")
print(f"[{kiritilgan.lstrip()}]")
print(f"[{kiritilgan.rstrip()}]")
narx = "$$$1500$$$"
print(narx.strip("$"))
Natija:
[salom dunyo]
[salom dunyo ]
[ salom dunyo]
1500
Almaştiriş, böliş va birlaştiriş
replace(eski, yangi) matndagi barça mos bölaklarni almaştiradi. split() satrni röyxatga böladi (standart holatda böş joylar böyiça), join() esa aksinça — röyxatni bitta satrga yiğadi.
xabar = "Bugun havo sovuq. Ertaga ham sovuq."
print(xabar.replace("sovuq", "iliq"))
mevalar = "olma,anor,uzum,behi"
royxat = mevalar.split(",")
print(royxat)
print(" | ".join(royxat))
print("-".join(["2026", "10", "26"]))
Natija:
Bugun havo iliq. Ertaga ham iliq.
['olma', 'anor', 'uzum', 'behi']
olma | anor | uzum | behi
2026-10-26
Boşlanişi, tugaşi va qidiriş
startswith()vaendswith()— satr berilgan bölak bilan boşlanadi yoki tugaydimi.find()— bölak birinçi uçragan indeksni qaytaradi, topilmasa-1.index()— xuddifind(), lekin topilmasaValueErrorberadi.count()— bölak neça marta uçraşini sanaydi.
fayl = "hisobot_2026.pdf"
print(fayl.endswith(".pdf"))
print(fayl.startswith("rasm"))
telefon = "+998901234567"
print(telefon.startswith("+998"))
matn = "banan va ananas"
print(matn.find("an"))
print(matn.find("olma"))
print(matn.index("va"))
print(matn.count("an"))
Natija:
True
False
True
1
-1
6
4
find() yoki index() — qaysi biri yaxşi? Agar bölak bölmasligi oddiy holat bölsa, find() qulay. Agar bölmasligi xato degani bölsa, index() muammoni darhol körsatadi.
Satr tarkibini tekşiriş
isdigit() satr faqat raqamlardan iboratligini, isalpha() faqat harflardan iboratligini tekşiradi. Ular foydalanuvçi kiritgan maʼlumotni tekşirişda juda kerak.
print("2026".isdigit())
print("20.5".isdigit())
print("Anvar".isalpha())
print("Anvar 2".isalpha())
print("".isdigit())
Natija:
True
False
True
False
False
Eʼtibor bering: böş satr uçun ikkala metod ham False qaytaradi, nuqta va böş joy esa raqam ham, harf ham emas.
Tekislaş va nollar bilan töldiriş
Jadval yoki çek çiqarişda matnni maʼlum kenglikka tekislaş kerak böladi. center(), ljust() va rjust() satrni berilgan kenglikkaça töldiradi (standart holatda böş joy bilan, xohlasangiz boşqa belgi bilan). zfill() esa raqamni çap tomondan nollar bilan töldiradi.
print("XARID".center(24, "*"))
print("Non".ljust(16, ".") + "4000".rjust(8))
print("Sut".ljust(16, ".") + "12000".rjust(8))
print("Jami".ljust(16, ".") + "16000".rjust(8))
buyurtma = 42
print(str(buyurtma).zfill(6))
Natija:
*********XARID**********
Non............. 4000
Sut............. 12000
Jami............ 16000
000042
Amaliy misollar
Foydalanuvçi kiritgan ismni tozalaş
Foydalanuvçilar ismni turliça yozadi: ortiqça böş joy, hammasi katta harf va hokazo. Keling, uni bir xil körinişga keltiramiz. split() argumentsiz çaqirilsa, ketma-ket kelgan bir neçta böş joyni bitta ajratuvçi deb hisoblaydi — bu sözlar orasidagi ortiqça böş joyni ham yöqotadi.
def ism_tozala(matn: str) -> str:
sozlar = matn.split()
return " ".join(sozlar).title()
kiritilganlar = [" aziza rahimova ", "BOBUR ALIYEV", "dilnoza"]
for k in kiritilganlar:
print(f"[{ism_tozala(k)}]")
Natija:
[Aziza Rahimova]
[Bobur Aliyev]
[Dilnoza]
Karta raqamini yaşiriş
Ilovalar karta raqamini töliq körsatmaydi — faqat oxirgi 4 ta raqam qoladi. Bu misolda böş joylarni olib taşlaymiz, raqamlarni tekşiramiz va qolganini yulduzça bilan yopamiz.
def karta_yashir(raqam: str) -> str:
raqam = raqam.replace(" ", "")
if not raqam.isdigit() or len(raqam) != 16:
return "Notöğri karta raqami"
yopiq = "*" * 12 + raqam[-4:]
# 4 tadan guruhlab çiqaramiz
guruhlar = [yopiq[i:i + 4] for i in range(0, 16, 4)]
return " ".join(guruhlar)
print(karta_yashir("8600 1234 5678 9012"))
print(karta_yashir("1234-5678"))
Natija:
**** **** **** 9012
Notöğri karta raqami
Matndagi sözlarni sanaş
Kiçik matnda neçta söz borligini va maʼlum bir söz neça marta uçraşini topamiz. Avval tiniş belgilarini olib taşlaymiz va hammasini kiçik harfga ötkazamiz, aks holda "Kitob" va "kitob." turli söz bölib qoladi.
matn = "Kitob — bilim manbai. Kitob öqigan odam köp narsani biladi, kitob esa döst."
toza = matn.lower()
for belgi in ".,—!?":
toza = toza.replace(belgi, " ")
sozlar = toza.split()
print("Sözlar soni:", len(sozlar))
print("'kitob' sözi:", sozlar.count("kitob"), "marta")
Natija:
Sözlar soni: 12
'kitob' sözi: 3 marta
Xulosa
- Satr (
str) — özgarmas belgilar ketma-ketligi; uni'...',"..."yoki köp qatorli"""..."""bilan yaratasiz. - Indeks 0 dan boşlanadi,
[-1]— oxirgi belgi;len()uzunlikni beradi. - Kesiş
[boshi:oxiri:qadam]körinişida,oxirikirmaydi;[::-1]satrni teskari aylantiradi. +birlaştiradi,*takrorlaydi,inqidiradi.- Metodlar asl satrni özgartirmaydi, yangi satr qaytaradi:
upper(),strip(),replace(),split(),join(),find(),count(),zfill()va boşqalar.
Maşqlar
"Python dasturlaş tili"satridan kesiş yordamida"dastur"sözini va oxirgi 4 ta belgini çiqaring.
Yeçim
matn = "Python dasturlaş tili"
print(matn[7:13])
print(matn[-4:])
- Telefon raqami berilgan:
" 90 123 45 67 ". Undagi barça böş joylarni olib taşlang, boşiga+998qöşing va natija 13 belgidan iboratligini tekşiring.
Yeçim
raqam = " 90 123 45 67 "
toza = "+998" + raqam.replace(" ", "")
print(toza)
print(len(toza) == 13)
palindrommi(soz)funksiyasini yozing: u katta-kiçik harfga qaramasdan söz palindrom bölsaTrueqaytarsin."Kiyik"va"Anvar"bilan tekşiring.
Yeçim
def palindrommi(soz: str) -> bool:
soz = soz.lower()
return soz == soz[::-1]
print(palindrommi("Kiyik"))
print(palindrommi("Anvar"))
"olma, anor ,uzum, behi"satridan har bir mevani tozalab, ularni katta harf bilan" / "orqali birlaştiring.
Yeçim
matn = "olma, anor ,uzum, behi"
mevalar = [m.strip().upper() for m in matn.split(",")]
print(" / ".join(mevalar))
- Buyurtma raqamlari röyxati
[7, 45, 312]berilgan. Har birini 5 xonali qilib (00007kabi) va oldiga"#"qöyib çiqaring.
Yeçim
for r in [7, 45, 312]:
print("#" + str(r).zfill(5))