IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

6. diel - Textové reťazce v Pythone

V minulej lekcii, Cykly v Pythone , sme sa zaoberali cyklami.

V minulej lekcii, Cykly v Pythone , sme sa venovali zoznamom. V dnešnom Python tutoriálu sa pozrieme na textové reťazce. Naučíme sa určenie ich dĺžky, zlučovanie, replikáciu a mnoho ďalšieho.

Reťazca

Textové reťazce slúži k uchovávaniu textu.

Vytváranie

Reťazce sa vytvárajú za pomoci jednoduchých alebo dvojitých apostrofov.

prazdny_retezec_1 = ""
prazdny_retezec_2 = ''
retezec_3 = "Python"
retezec_4 = 'Iný text!'

Prázdny reťazec sa vyhodnotia na boolean False, neprázdny na True.

prazdny_retezec_1 = ""
prazdny_retezec_2 = ''
retezec_3 = "Python"
retezec_4 = 'Iný text!'

print(bool(prazdny_retezec_1))
print(bool(retezec_3))

výstup:

>>> bool(prazdny_retezec_1)
False
>>> bool(retezec_3)
True

Špeciálne znaky

Občas potrebujeme trochu "špeciálny" text. Napríklad v konzole poskočiť na ďalšie riadku, vytlačiť úvodzovky pod. Tieto špeciálne znaky zapisujeme pomocou tzv. Escape sekvencií, ktoré začínajú spätným lomítkom.

Nový riadok

Nový riadok sa zapíše ako \n. Príklad:

print("Prvý riadok\nDruhý riadok")

Do konzoly sa vypíše Prvý riadok, Potom sa skočí na ďalší, a tam sa vypíše Druhý riadok.

Tabulátor

Tabulátor sa zapíše ako \t. Príklad:

print("Pred\tZa")

Tabulátor zarovnáva slová tak, aby každé slovo po tabulátora začínalo na pozíciu, ktorá je násobkom 8 (prvý znak reťazca sa počíta od nuly).

Zvonček

Zvonček sa zapíše ako \a. Užitočné, ak chcete v nejakej konzolovej aplikácii zapípať.

Spätné lomítko

Spätné lomítko sa zapíše ako \\, pretože \ začínajú špeciálne znaky. Ak nepotrebujeme žiadne špeciálne znaky začínajúce \, môžeme použiť tzv. Holé reťazca. Tie sa vytvárajú rovnako ako reťazce, ale pred prvou úvodzovky sa napíše navyše r. Holý reťazec berie každý znak v reťazci zvlášť, takže napr. r"\n", berie holý reťazec ako spätné lomítko a n, nie ako znak pre nový riadok.

Úvodzovky

Jednoduché úvodzovky sa zapíšu ako \', dvojité ako \". Ak používame reťazec vytvorený z jednoduchých úvodzoviek ('), tak možno písať dvojité úvodzovky (") bez problémov, bez nutnosti potlačenie. A naopak. Možno tiež použiť aj trojité úvodzovky ('''Text''' alebo """Text"""), potom nemusíte používať pred úvodzovkami v texte spätné lomítko.

"Problém" s reťazcami

Reťazce sú iterovatelný objekt! Skladajú sa totiž z jednotlivých znakov. Preto keď pri vytváraní zoznamu použijeme nejaký reťazec, uloží sa nám do neho jednotlivé znaky.

Príklad:

seznam = list("abcde")
print(seznam)

Vďaka tomu môžeme testovať, či nejaký reťazec neobsahuje iný reťazec.

Príklad:

print("kra" in "okraj")
print(";" in "python")

A možno je prechádzať cyklom.

for znak in "python":
    print(znak)

Dĺžka reťazca

Dĺžka reťazca sa zistí funkciou len().

Príklady:

print(len("a"))
print(len("Python"))
print(len("Reťazca"))
print(len("Reťazca v Pythone."))

Zlučovanie

Zlučovanie je spojenie viacerých reťazcov do jedného. Niečo na spôsob sčítanie čísel. Ako operátor použijeme znamienko +.

Príklad:

retezec_1 = "Python"
retezec_2 = " je najlepší!"
print(retezec_1 + retezec_2)

Replikácie

Replikácie je "množenie" reťazcov. Zadaný reťazec sa n -krát zopakuje, stačí ho "vynásobiť" nejakým číslom.

Príklad:

retezec = "Bum! "
print(retezec * 7)

Prevod znaku na číslo a späť

Znaky sa prevádzajú na čísla o desiatkovom základu pomocou funkcie ord(). Späť sa prevádzajú funkciou chr(). Každý znak má svoju číselnú hodnotu. A keďže Unicode v sebe zahŕňa ASCII, tak čísla "základných znakov", možno zistiť pomocou ASCII tabuľky.

Príklad:

print(ord("a"))
print(chr(97))

Programy

Teraz máme základný prehľad o reťazcoch. Preto teraz upravíme jeden, už predtým vyrobený program a ďalší si vytvoríme :)

Rozbor vety

Tu je náš prvý program:

print("Program zistí z čoho sa skladá slovo.")
slovo = input("Zadajte slovo: ")
samohlasky = 0
souhlasky = 0
ostatni = 0
cisel = 0
for znak in slovo:
    if znak in "aáeéěiíoóuúů":
        samohlasky = samohlasky + 1
    elif znak in "bcčdďfghjklmnňpqrřsštťvwxzž":
        souhlasky = souhlasky + 1
    elif znak in "0123456789":
        cisel = cisel + 1
    else:
        ostatni = ostatni + 1
print(slovo, "má: ")
print("samohlások", samohlasky)
print("spoluhlások", souhlasky)
print("čísel", cisel)
print("ostatných znakov...", ostatni)
input("\nAplikáciu ukončíte stlačením ľubovoľného klávesu...")

Program možno vďaka nadobudnutým znalostiam písať trochu lepšie.

  1. Počet nečíselných znakov možno dopočítať pomocou funkcie len().
  2. Číslice "0""9" majú v ASCII tabuľke hodnoty 4857.
Vylepšený program:
print("Program zistí z čoho sa skladá slovo.")
slovo = input("Zadajte slovo: ")
samohlasky = 0
souhlasky = 0
cisel = 0
for znak in slovo:
    if znak in "aáeéěiíoóuúů":
        samohlasky = samohlasky + 1
    elif znak in "bcčdďfghjklmnňpqrřsštťvwxzž":
        souhlasky = souhlasky + 1
    elif ord(znak) in range(48, 58):
        cisel = cisel + 1
    else:
        pass
print(slovo, "má: ")
print("samohlások", samohlasky)
print("spoluhlások", souhlasky)
print("čísel", cisel)
print("ostatných znakov...", len(slovo) - samohlasky - souhlasky - cisel)
input("\nAplikáciu ukončíte stlačením ľubovoľného klávesu...")

Cézarovho šifra

Vytvoríme si jednoduchý program pre na šifrovanie textu. Ak ste niekedy počuli o Cesarova šifre, bude to presne to, čo si tu naprogramujeme. Šifrovanie textu spočíva v posúvaní znaku v abecede o určitý, pevne stanovený počet znakov. Napríklad slovo ahoj sa s posunom textu o 1 preloží ako bipk. Posun umožníme užívateľovi vybrať. Algoritmus tu máme samozrejme opäť vysvetlený a to v článku Cézarovho šifra. Program si dokonca môžete vyskúšať v praxi - Online Cézarovho šifra.

Vráťme sa k programovaniu a pripravme si kód. Budeme potrebovať premenné pre pôvodné text, pre zašifrovanú správu a pre posun. Ďalej cyklus prechádzajúce jednotlivé znaky a výpis zašifrované správy. Správu si necháme zapísanú napevno v kóde, aby sme ju nemuseli pri každom spustení programu písať. Po dokončení nahradíme obsah premennej funkcií input(). Šifra nepočíta s diakritikou, medzier a interpunkčných znamienok. Diakritiku budeme bojkotovať a budeme predpokladať, že ju užívateľ nebude zadávať. Ideálne by sme potom mali diakritiku pred šifrovaním odstrániť, rovnako tak hocičo okrem písmen.

# inicializácia premenných
retezec = "cernediryjsoutamkdebuhdelilnulou"
print("Pôvodná správa:", retezec)
zprava = ""
posun = 1

# cyklus prechádzajúce jednotlivé znaky
for znak in retezec:
    pass
# výpis
print("Zašifrované správa:", zprava)
input()

Teraz sa presunieme dovnútra cyklu, prevedieme znak znak na ASCII hodnotu (čiže ordinálna hodnotu), túto hodnotu zvýšime o posun a prevedieme späť na znak. Tento znak nakoniec pripojíme k výslednej správe:

    i = ord(znak)
    i = i + posun
    znak = chr(i)
    zprava = zprava + znak

Program si vyskúšame. Výsledok vyzerá celkom dobre. Skúsme si však zadať vyššiu posun alebo napísať slovo zebra. Vidíme, že znaky môžu po "z" pretiecť do ASCII hodnôt ďalších znakov, v texte teda už nemáme len písmená, ale ďalšie škaredé znaky. Uzavrieme znaky do kruhu tak, aby posun plynulo po "z" prešiel opäť k "a" a ďalej. Postačí nám k tomu jednoduchá podmienka, ktorá od novej ASCII hodnoty odpočíta celú abecedu tak, aby sme začínali opäť na "a".

    i = ord(znak)
    i = i + posun
    # kontrola pretečeniu
    if (i > ord("z")):
        i = i - 26
    znak = chr(i)
    zprava = zprava + znak

Ak i presiahne ASCII hodnotu "z", znížime ho o 26 znakov (toľko znakov má anglická abeceda). Je to jednoduché a náš program je teraz funkčná. Všimnime si, že nikde nepoužívame priame kódy znakov, v podmienke je ord("z"), aj keď by sme tam mohli napísať rovno 122. Je to z dôvodu, aby bol náš program plne odtienený od explicitných ASCII hodnôt a bolo lepšie viditeľné, ako funguje.

Výsledný kód:

# inicializácia premenných
retezec = input("Zadajte slovo: ")
posun = int(input("Zadajte posun: "))
print("Pôvodná správa:", retezec)
zprava = ""

# cyklus prechádzajúce jednotlivé znaky
for znak in retezec:
    i = ord(znak)
    i = i + posun
    # kontrola pretečeniu
    if (i > ord("z")):
        i = i - 26
    znak = chr(i)
    zprava = zprava + znak

# výpis
print("Zašifrované správa:", zprava)
input()

V budúcej lekcii, Textové reťazce v Pythone - pokračovanie , nás čaká prehĺbenie vedomostí o reťazcoch. Naučíme sa je formátovať, porovnávať a používať ich metódy.

V budúcej lekcii, Textové reťazce v Pythone - pokračovanie , nás čaká prehĺbenie vedomostí o reťazcoch. Naučíme sa je formátovať, porovnávať a používať ich metódy.


 

Predchádzajúci článok
Cykly v Pythone
Všetky články v sekcii
Základné konštrukcie jazyka Python
Preskočiť článok
(neodporúčame)
Textové reťazce v Pythone - pokračovanie
Článok pre vás napísal gcx11
Avatar
Užívateľské hodnotenie:
8 hlasov
(^_^)
Aktivity