6-bo‘lim

Satrlar bilan ishlash

Matn tipidagi ma'lumotlar: indekslash, kesish (slicing), eng kerakli metodlar va f-satrlar bilan formatlash.

🕑 16 daqiqa o‘qish 📄 557 so‘z 👁 5 marta ko‘rilgan
Ushbu bo‘lim mundarijasi
  1. Satr yaratish
  2. Indekslash
  3. Kesish (slicing)
  4. Eng kerakli satr metodlari
  5. Registr bilan ishlash
  6. Tozalash
  7. Qidirish va almashtirish
  8. Bo'lish va birlashtirish
  9. Tekshiruv metodlari
  10. Metodlar jadvali
  11. f-satrlar bilan formatlash
  12. Tekislash
  13. Amaliy misol: matn tahlilchisi
  14. Xulosa

Dasturchining ish vaqtining katta qismi matn bilan o'tadi: foydalanuvchi ismi, manzil, fayl mazmuni, veb-sahifa. Python'da matn str turida saqlanadi va u bilan ishlash uchun juda boy vositalar to'plami mavjud.

Satr yaratish #

Python
birinchi = "Qo'shtirnoq bilan"
ikkinchi = 'Bitta tirnoq bilan'
kop_satrli = """Bu matn
bir necha satrdan
iborat"""

print(kop_satrli)
Natija
Bu matn
bir necha satrdan
iborat
Qaysi tirnoqni tanlash kerak?

Matn ichida apostrof bo'lsa - qo'shtirnoq ishlating, shunda ekranlash kerak bo'lmaydi:

Python
xabar = "O'zbekiston Respublikasi"        # qulay
xabar = 'O\'zbekiston Respublikasi'       # ishlaydi, lekin xunuk

Indekslash #

Satrdagi har bir belgi o'z tartib raqamiga ega. Sanoq noldan boshlanadi.

matn = "PYTHON" P Y T H O N 0 1 2 3 4 5 ← oldinga -6 -5 -4 -3 -2 -1 ← orqaga
Musbat indekslar boshidan, manfiylari oxiridan sanaladi
Python
matn = "PYTHON"

print(matn[0])       # birinchi belgi
print(matn[3])       # to'rtinchi belgi
print(matn[-1])      # oxirgi belgi
print(matn[-2])      # oxiridan ikkinchi
print(len(matn))     # uzunligi
Natija
P
H
N
O
6
Satrlar o'zgarmas (immutable)
Python
matn = "PYTHON"
matn[0] = "M"
Natija
TypeError: 'str' object does not support item assignment

Satrni o'zgartirib bo'lmaydi - faqat yangi satr yaratish mumkin:

Python
matn = "M" + matn[1:]
print(matn)     # MYTHON

Kesish (slicing) #

Umumiy shakl: matn[boshi:oxiri:qadam]

Python
matn = "Dasturlash"

print(matn[0:7])      # 0 dan 7 gacha (7 kirmaydi)
print(matn[:7])       # boshidan 7 gacha
print(matn[7:])       # 7 dan oxirigacha
print(matn[:])        # to'liq nusxa
print(matn[::2])      # har ikkinchi belgi
print(matn[::-1])     # teskari
print(matn[-4:])      # oxirgi 4 belgi
Natija
Dasturl
Dasturl
ash
Dasturlash
Dsuls
hsalrutsaD
lash
Teskari o'girishning eng qisqa usuli

matn[::-1] - Python'da satrni teskari o'girishning idiomatik yo'li. Palindrom tekshirishda juda qulay:

Python
soz = "shosh"
if soz == soz[::-1]:
    print(f"'{soz}' - palindrom!")
Natija
'shosh' - palindrom!

Eng kerakli satr metodlari #

Registr bilan ishlash #

Python
matn = "salom DUNYO"

print(matn.upper())        # hammasi katta
print(matn.lower())        # hammasi kichik
print(matn.title())        # Har So'z Bosh Harf
print(matn.capitalize())   # Faqat birinchi harf
print(matn.swapcase())     # registrni almashtirish
Natija
SALOM DUNYO
salom dunyo
Salom Dunyo
Salom dunyo
SALOM dunyo

Tozalash #

Python
kiritilgan = "   [email protected]   "

print(f"[{kiritilgan}]")
print(f"[{kiritilgan.strip()}]")      # ikki tomondan
print(f"[{kiritilgan.lstrip()}]")     # chapdan
print(f"[{kiritilgan.rstrip()}]")     # o'ngdan
Foydalanuvchi kiritgan ma'lumotni doim tozalang

input() orqali olingan har qanday matnga .strip() qo'llang - foydalanuvchilar tasodifan bo'shliq qo'shib yuborishi juda keng tarqalgan.

Qidirish va almashtirish #

Python
manzil = "Toshkent shahri, Chilonzor tumani"

print(manzil.find("Chilonzor"))       # indeksni qaytaradi
print(manzil.find("Yunusobod"))       # topilmasa -1
print(manzil.count("a"))              # necha marta uchraydi
print(manzil.replace("Chilonzor", "Yunusobod"))
print(manzil.startswith("Toshkent"))
print(manzil.endswith("tumani"))
Natija
17
-1
5
Toshkent shahri, Yunusobod tumani
True
True

Bo'lish va birlashtirish #

Python
qator = "olma,anor,uzum,shaftoli"

mevalar = qator.split(",")
print(mevalar)

# Teskari amal
yangi_qator = " | ".join(mevalar)
print(yangi_qator)

# Bo'shliq bo'yicha bo'lish (sukut bo'yicha)
gap = "Men Python o'rganyapman"
sozlar = gap.split()
print(sozlar, "-", len(sozlar), "ta so'z")
Natija
['olma', 'anor', 'uzum', 'shaftoli']
olma | anor | uzum | shaftoli
['Men', 'Python', "o'rganyapman"] - 3 ta so'z

Tekshiruv metodlari #

MetodTrue qaytaradi agar
.isdigit()faqat raqamlardan iborat
.isalpha()faqat harflardan iborat
.isalnum()harf va raqamlardan iborat
.isspace()faqat bo'shliqlardan iborat
.islower()hammasi kichik harf
.isupper()hammasi katta harf
Python
kiritilgan = input("Yoshingizni kiriting: ")

if kiritilgan.isdigit():
    yosh = int(kiritilgan)
    print(f"Rahmat! Sizga {yosh} yosh.")
else:
    print("Xato: faqat raqam kiriting.")
Natija
Yoshingizni kiriting: 22
Rahmat! Sizga 22 yosh.

Metodlar jadvali #

MetodVazifasiMisol
len(s)Uzunliklen("abc")3
s.upper()Katta harf"ab".upper()"AB"
s.lower()Kichik harf"AB".lower()"ab"
s.strip()Bo'shliqni olib tashlash" a ".strip()"a"
s.split(x)Ro'yxatga bo'lish"a,b".split(",")['a','b']
x.join(list)Birlashtirish"-".join(['a','b'])"a-b"
s.replace(a,b)Almashtirish"aa".replace("a","b")"bb"
s.find(x)Indeksni topish"abc".find("b")1
s.count(x)Sanash"aab".count("a")2
s.zfill(n)Nol bilan to'ldirish"7".zfill(3)"007"
s.center(n)Markazlash"a".center(5)" a "

f-satrlar bilan formatlash #

f-satrlar (formatted string literals) - matnga qiymat qo'shishning eng zamonaviy usuli.

Python
ism = "Sardor"
narx = 1234567.891
foiz = 0.2456

print(f"Salom, {ism}!")
print(f"Narx: {narx:,.2f} so'm")        # minglik ajratgich + 2 kasr
print(f"Chegirma: {foiz:.1%}")          # foiz shaklida
print(f"Hisob: {42:05d}")               # nollar bilan to'ldirish
print(f"Hex: {255:x}, Bin: {5:b}")      # sanoq sistemalari
Natija
Salom, Sardor!
Narx: 1,234,567.89 so'm
Chegirma: 24.6%
Hisob: 00042
Hex: ff, Bin: 101

Tekislash #

Python
mahsulotlar = [("Klaviatura", 185000), ("Sichqoncha", 95000), ("Monitor", 2450000)]

print(f"{'Mahsulot':<15}{'Narx':>12}")
print("-" * 27)
for nomi, narxi in mahsulotlar:
    print(f"{nomi:<15}{narxi:>12,}")
Natija
Mahsulot               Narx
---------------------------
Klaviatura          185,000
Sichqoncha           95,000
Monitor           2,450,000
BelgiMa'nosiMisol
<Chapga tekislashf"{'a':<5}"
>O'ngga tekislashf"{'a':>5}"
^Markazgaf"{'a':^5}"
,Minglik ajratgichf"{1000:,}"
.2f2 kasr xonaf"{3.14159:.2f}"
%Foizf"{0.25:%}"
Nosozlikni tuzatish uchun =

Python 3.8 dan boshlab f-satr ichida = belgisi ifodani ham, natijani ham chiqaradi:

Python
narx = 15000
soni = 3
print(f"{narx * soni = }")
Natija
narx * soni = 45000

Bu print() bilan tekshirishni ancha tezlashtiradi.

Amaliy misol: matn tahlilchisi #

Python
# ============================================
# Matn statistikasini hisoblovchi dastur
# ============================================

matn = """Python - bu yuqori darajali dasturlash tili.
Python o'qish uchun juda qulay.
Ko'plab kompaniyalar Python ishlatadi."""

sozlar = matn.split()
satrlar = matn.split("\n")
belgilar = len(matn.replace(" ", "").replace("\n", ""))

print("=" * 40)
print(f"{'MATN TAHLILI':^40}")
print("=" * 40)
print(f"{'Satrlar soni:':<26}{len(satrlar):>13}")
print(f"{'So‘zlar soni:':<26}{len(sozlar):>13}")
print(f"{'Belgilar (bo‘shliqsiz):':<26}{belgilar:>13}")
print(f"{'Python soni:':<26}{matn.count('Python'):>13}")
print(f"{'O‘rtacha so‘z uzunligi:':<26}{belgilar / len(sozlar):>13.1f}")
print("=" * 40)

print("\nEng uzun 3 ta so'z:")
for soz in sorted(sozlar, key=len, reverse=True)[:3]:
    print(f"  - {soz.strip('.,')} ({len(soz)} belgi)")
Natija
========================================
              MATN TAHLILI              
========================================
Satrlar soni:                         3
So'zlar soni:                        16
Belgilar (bo'shliqsiz):             106
Python soni:                          3
O'rtacha so'z uzunligi:             6.6
========================================

Eng uzun 3 ta so'z:
  - kompaniyalar (12 belgi)
  - dasturlash (10 belgi)
  - darajali (9 belgi)
Amaliy topshiriq

parol_tekshiruvchi.py dasturini yozing:

  1. Foydalanuvchidan parol so'rang.
  2. Tekshiring: uzunligi kamida 8 ta belgimi (len)?
  3. Ichida kamida bitta raqam bormi (any(b.isdigit() for b in parol))?
  4. Katta harf bormi (any(b.isupper() for b in parol))?
  5. Har bir shart uchun [+] yoki [-] belgisi bilan hisobot chiqaring.

Xulosa #

  • Satrlar o'zgarmas - har qanday amal yangi satr qaytaradi.
  • Indekslash noldan boshlanadi; manfiy indekslar oxiridan sanaladi.
  • [boshi:oxiri:qadam] kesish sintaksisi juda kuchli, [::-1] teskari o'giradi.
  • strip(), split(), join(), replace() - eng ko'p ishlatiladigan metodlar.
  • f"..." satrlari formatlashning eng qulay va zamonaviy usuli.

Keyingi bo'limda bir nechta qiymatni birga saqlash - ro'yxatlar va kortejlar bilan tanishamiz.

Xatolik topdingizmi?

Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.