OzbekPython / Bob 05

Satrlar (str)

Matn bilan işlaş — satr yaratiş, indekslaş, kesiş, eng foydali metodlar va kundalik hayotdan amaliy misollar.

Boşlanğiç daraja21 daqiqa20 kod misoli5 / 24

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.

Python
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:

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.

Python
elon = """Diqqat!
Ertaga soat 10:00 da
bozor yopiq böladi."""

print(elon)

Natija:

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.

BelgiPython
Musbat indeks012345
Manfiy indeks-6-5-4-3-2-1
Python
til = "Python"

print(til[0])
print(til[3])
print(til[-1])
print(til[-2])
print(len(til))

Natija:

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.

Python
soz = "Samarqand"

print(soz[0:5])
print(soz[5:])
print(soz[:3])
print(soz[-4:])
print(soz[::2])
print(soz[::-1])

Natija:

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.

Python
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:

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.

Python
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:

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

MetodNima 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
Python
matn = "buxoro qadimiy ŞAHAR"

print(matn.upper())
print(matn.lower())
print(matn.title())
print(matn.capitalize())

Natija:

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.

Python
kiritilgan = "   salom dunyo   "

print(f"[{kiritilgan.strip()}]")
print(f"[{kiritilgan.lstrip()}]")
print(f"[{kiritilgan.rstrip()}]")

narx = "$$$1500$$$"
print(narx.strip("$"))

Natija:

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.

Python
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:

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() va endswith() — satr berilgan bölak bilan boşlanadi yoki tugaydimi.
  • find() — bölak birinçi uçragan indeksni qaytaradi, topilmasa -1.
  • index() — xuddi find(), lekin topilmasa ValueError beradi.
  • count() — bölak neça marta uçraşini sanaydi.
Python
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:

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.

Python
print("2026".isdigit())
print("20.5".isdigit())
print("Anvar".isalpha())
print("Anvar 2".isalpha())
print("".isdigit())

Natija:

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.

Python
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:

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.

Python
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:

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.

Python
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:

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.

Python
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:

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, oxiri kirmaydi; [::-1] satrni teskari aylantiradi.
  • + birlaştiradi, * takrorlaydi, in qidiradi.
  • Metodlar asl satrni özgartirmaydi, yangi satr qaytaradi: upper(), strip(), replace(), split(), join(), find(), count(), zfill() va boşqalar.

Maşqlar

  1. "Python dasturlaş tili" satridan kesiş yordamida "dastur" sözini va oxirgi 4 ta belgini çiqaring.
Yeçim
Python
matn = "Python dasturlaş tili"
print(matn[7:13])
print(matn[-4:])
  1. Telefon raqami berilgan: " 90 123 45 67 ". Undagi barça böş joylarni olib taşlang, boşiga +998 qöşing va natija 13 belgidan iboratligini tekşiring.
Yeçim
Python
raqam = " 90 123 45 67 "
toza = "+998" + raqam.replace(" ", "")
print(toza)
print(len(toza) == 13)
  1. palindrommi(soz) funksiyasini yozing: u katta-kiçik harfga qaramasdan söz palindrom bölsa True qaytarsin. "Kiyik" va "Anvar" bilan tekşiring.
Yeçim
Python
def palindrommi(soz: str) -> bool:
    soz = soz.lower()
    return soz == soz[::-1]

print(palindrommi("Kiyik"))
print(palindrommi("Anvar"))
  1. "olma, anor ,uzum, behi" satridan har bir mevani tozalab, ularni katta harf bilan " / " orqali birlaştiring.
Yeçim
Python
matn = "olma, anor ,uzum,  behi"
mevalar = [m.strip().upper() for m in matn.split(",")]
print(" / ".join(mevalar))
  1. Buyurtma raqamlari röyxati [7, 45, 312] berilgan. Har birini 5 xonali qilib (00007 kabi) va oldiga "#" qöyib çiqaring.
Yeçim
Python
for r in [7, 45, 312]:
    print("#" + str(r).zfill(5))