Гузариш ба мундариҷа
Мавзӯи 8 аз 18

Сатрҳо

Сатрҳоро мо аз дарси аввал истифода мебарем. Акнун ҷудо кардани онҳоро ба қисмҳо меомӯзем: гирифтани аломатҳои алоҳида, буридани порчаҳо, ҷустуҷӯ ва иваз кардан.

Сатр — пайдарпайии аломатҳо

Ҳар аломати сатр рақам дорад — индекс. Рақамгузорӣ аз сифр сар мешавад:

 s = "дарахт"
      д а р а х т
индекс 0 1 2 3 4 5
аз охир -6 -5 -4 -3 -2 -1
s = "дарахт"
print(s[0])      # д
print(s[3])      # а
print(s[-1])     # т — аломати охирин
print(len(s))    # 6 — дарозӣ

Аломати охирин — s[len(s) - 1] ё соддатар s[-1]. Муроҷиат ба индекси берун аз сатр, масалан s[6], хатои IndexError медиҳад.

Бурришҳо

Бурриш s[a:b] — порчаи сатр аз индекси a то b, бе дохил кардани b (мисли range):

s = "барномасозӣ"
print(s[0:5])    # барно
print(s[:3])     # бар — аз аввал
print(s[5:])     # масозӣ — то охир
print(s[-4:])    # созӣ — 4 аломати охирин

Параметри сеюм — қадам:

s = "0123456789"
print(s[::2])    # 02468 — ҳар дуюмаш
print(s[1::3])   # 147
print(s[::-1])   # 9876543210 — тамоми сатр баръакс

Бурришҳо хато намедиҳанд, ҳатто агар сарҳадҳо берун аз сатр бошанд: s[5:100] танҳо ҳама чизро то охир бармегардонад.

Сатрҳо тағйирнопазиранд

Аломатро аз рӯи индекс иваз кардан мумкин нест: s[0] = "А" хато медиҳад. Ба ҷои ин сатри нав ҷамъ мекунанд:

s = "гурба"
s = "Г" + s[1:]
print(s)         # Гурба

Гузаштан аз аломатҳо

Давраи for метавонад сатрро аломат ба аломат гузарад:

word = "лаблабу"
count = 0
for ch in word:
    if ch == "б":
        count += 1
print(count)     # 2

Агар индекс ҳам лозим бошад, range(len(s))-ро гузар:

s = "abcd"
for i in range(len(s)):
    print(i, s[i])

Бо индекс муқоиса кардани аломатҳои ҳамсоя қулай аст: s[i] ва s[i - 1] (аз i = 1 сар карда).

Ҷамъ кардани сатр порча ба порча

Сатри навро аксар вақт дар давра, аз сатри холӣ сар карда, месозанд:

s = "hello"
res = ""
for ch in s:
    res += ch + "-"
print(res)       # h-e-l-l-o-

Ададро ба сатр str() табдил медиҳад: "x" + str(5) "x5" медиҳад.

Методҳои сатр

Методҳо бо нуқта даъват мешаванд: сатр.метод(). Онҳо сатри аслиро тағйир намедиҳанд, балки сатри нав бармегардонанд.

Метод Чӣ мекунад Мисол
s.upper(), s.lower() ҳамаи ҳарфҳо калон / хурд "Ab".upper() → "AB"
s.count(t) t чанд бор вомехӯрад "abab".count("ab") → 2
s.find(t) индекси вохӯрии аввал ё -1 "abc".find("c") → 2
s.replace(a, b) ҳамаи a-ро ба b иваз кардан "a-b".replace("-", "+") → "a+b"
s.strip() фосилаҳоро аз канорҳо гирифтан " hi ".strip() → "hi"
s.isdigit() ҳамаи аломатҳо рақаманд? "123".isdigit() → True
s.isalpha() ҳамаи аломатҳо ҳарфанд? "abc".isalpha() → True

Оператори in месанҷад, ки зерсатр ҳаст ё не: "гул" in "гулоб" — True.

Муқоисаи сатрҳо

Сатрҳо аломат ба аломат, мисли калимаҳо дар луғат, муқоиса мешаванд: "apple" < "banana" — True. Бинобар ин санҷиши «аломат — ҳарфи хурди лотинӣ» чунин навишта мешавад:

ch = "q"
if "a" <= ch <= "z":
    print("ҳарфи хурди лотинӣ")

Рамзҳои аломатҳо: ord ва chr

Дар дохили компютер ҳар аломат — адад, яъне рамзи он аст. ord рамзи аломатро медиҳад, chr — аломатро аз рӯи рамз:

print(ord("a"))       # 97
print(ord("b"))       # 98
print(chr(100))       # d

Ҳарфҳои лотинӣ паси ҳам меоянд: рамзи a 97, b — 98, …, z — 122. Бинобар ин рақами ҳарф дар алифбо — ord(ch) - ord("a") (барои a ин 0, барои z — 25), ва ҳарфро аз рӯи рақам chr(рақам + ord("a")) медиҳад.

Бо рақамҳо низ ҳамин тавр: ord("7") - ord("0") ба 7 баробар аст.

ch = "c"
num = ord(ch) - ord("a")       # 2
print(chr(num + 1 + ord("a"))) # d — ҳарфи навбатӣ

Хулоса

  • s[i] — аломат, s[-1] — охирин, len(s) — дарозӣ;
  • s[a:b:қадам] — бурриш, s[::-1] — сатр баръакс;
  • сатрҳо тағйирнопазиранд: сатри навро тавассути + ҷамъ кун;
  • for ch in s аломатҳоро мегузарад;
  • методҳои upper, lower, count, find, replace, strip, isdigit;
  • ord ва chr аломатро ба рамз ва баръакс табдил медиҳанд.