6-bo‘lim
Satrlar bilan ishlash
Matn tipidagi ma'lumotlar: indekslash, kesish (slicing), eng kerakli metodlar va f-satrlar bilan formatlash.
Ushbu bo‘lim mundarijasi
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 #
birinchi = "Qo'shtirnoq bilan"
ikkinchi = 'Bitta tirnoq bilan'
kop_satrli = """Bu matn
bir necha satrdan
iborat"""
print(kop_satrli)
Bu matn
bir necha satrdan
iborat
Matn ichida apostrof bo'lsa - qo'shtirnoq ishlating, shunda ekranlash kerak bo'lmaydi:
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"
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
P
H
N
O
6
matn = "PYTHON"
matn[0] = "M"
TypeError: 'str' object does not support item assignment
Satrni o'zgartirib bo'lmaydi - faqat yangi satr yaratish mumkin:
matn = "M" + matn[1:]
print(matn) # MYTHON
Kesish (slicing) #
Umumiy shakl: matn[boshi:oxiri:qadam]
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
Dasturl
Dasturl
ash
Dasturlash
Dsuls
hsalrutsaD
lash
matn[::-1] - Python'da satrni teskari o'girishning idiomatik yo'li. Palindrom tekshirishda juda qulay:
soz = "shosh"
if soz == soz[::-1]:
print(f"'{soz}' - palindrom!")
'shosh' - palindrom!
Eng kerakli satr metodlari #
Registr bilan ishlash #
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
SALOM DUNYO
salom dunyo
Salom Dunyo
Salom dunyo
SALOM dunyo
Tozalash #
kiritilgan = " [email protected] "
print(f"[{kiritilgan}]")
print(f"[{kiritilgan.strip()}]") # ikki tomondan
print(f"[{kiritilgan.lstrip()}]") # chapdan
print(f"[{kiritilgan.rstrip()}]") # o'ngdan
input() orqali olingan har qanday matnga .strip() qo'llang - foydalanuvchilar tasodifan bo'shliq qo'shib yuborishi juda keng tarqalgan.
Qidirish va almashtirish #
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"))
17
-1
5
Toshkent shahri, Yunusobod tumani
True
True
Bo'lish va birlashtirish #
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")
['olma', 'anor', 'uzum', 'shaftoli']
olma | anor | uzum | shaftoli
['Men', 'Python', "o'rganyapman"] - 3 ta so'z
Tekshiruv metodlari #
| Metod | True 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 |
kiritilgan = input("Yoshingizni kiriting: ")
if kiritilgan.isdigit():
yosh = int(kiritilgan)
print(f"Rahmat! Sizga {yosh} yosh.")
else:
print("Xato: faqat raqam kiriting.")
Yoshingizni kiriting: 22
Rahmat! Sizga 22 yosh.
Metodlar jadvali #
| Metod | Vazifasi | Misol |
|---|---|---|
len(s) | Uzunlik | len("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.
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
Salom, Sardor!
Narx: 1,234,567.89 so'm
Chegirma: 24.6%
Hisob: 00042
Hex: ff, Bin: 101
Tekislash #
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,}")
Mahsulot Narx
---------------------------
Klaviatura 185,000
Sichqoncha 95,000
Monitor 2,450,000
| Belgi | Ma'nosi | Misol |
|---|---|---|
< | Chapga tekislash | f"{'a':<5}" |
> | O'ngga tekislash | f"{'a':>5}" |
^ | Markazga | f"{'a':^5}" |
, | Minglik ajratgich | f"{1000:,}" |
.2f | 2 kasr xona | f"{3.14159:.2f}" |
% | Foiz | f"{0.25:%}" |
=Python 3.8 dan boshlab f-satr ichida = belgisi ifodani ham, natijani ham chiqaradi:
narx = 15000
soni = 3
print(f"{narx * soni = }")
narx * soni = 45000
Bu print() bilan tekshirishni ancha tezlashtiradi.
Amaliy misol: matn tahlilchisi #
# ============================================
# 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)")
========================================
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)
parol_tekshiruvchi.py dasturini yozing:
- Foydalanuvchidan parol so'rang.
- Tekshiring: uzunligi kamida 8 ta belgimi (
len)? - Ichida kamida bitta raqam bormi (
any(b.isdigit() for b in parol))? - Katta harf bormi (
any(b.isupper() for b in parol))? - 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.
O‘qish tarixini saqlamoqchimisiz?
Tizimga kirsangiz, tugatgan bo‘limlaringiz saqlanadi va qoldirgan joyingizdan davom etasiz.
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.