IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

6. diel - Textové reťazce v Pythone

V minulej lekcii, Typový systém druhýkrát - Dátové typy v Pythone, sme si povedali viac o dátových typoch v Pythone.

V tomto Python tutoriále sa pozrieme na textové reťazce. Naučíme sa zistiť ich dĺžku, ako ich zlúčiť, replikovať a mnoho ďalšieho.

Textové reťazce v Pythone

Textové reťazce slúžia na uchovávanie textu. Sú to v podstate sekvencie znakov obklopené buď jednoduchými ('text'), dvojitými ("text"), alebo trojitými úvodzovkami ('''text''' alebo """text"""). Vďaka tejto flexibilite sa naučíme ľahko pracovať s rôznymi textovými formátmi, vrátane reťazcov obsahujúcich úvodzovky. S reťazcami je možné vykonávať rôzne operácie, ako je spojenie, rozdelenie, vyhľadávanie podreťazcov či menenie veľkosti písmen.

Vytváranie reťazcov

Už sme si povedali, že reťazce sa v Pythone vytvárajú pomocou jednoduchých, dvojitých alebo trojitých úvodzoviek.

Jednoduché a dvojité úvodzovky

Najjednoduchším variantom je vytvorenie reťazca pomocou jednoduchých alebo dvojitých úvodzoviek:

empty_string = ""
another_empty_string = ''
language = "Python"
website = 'ICTdemy.com'
Kombinácia jednoduchých a dvojitých úvodzoviek

Často potrebujeme v texte vypísať úvodzovky. Aby sme nemuseli znaky "escapovať", Python pre nás má riešenie spočívajúce v kombinácii úvodzoviek:

message = 'My friend said: "Whoever uses Python never gets bored!" And he was right.'
print(message)

"Escapovanie" znakov znamená, že pred špeciálnym znakom vložíme spätnú lomku (\). Spätná lomka hovorí programovaciemu jazyku, že nasledujúci znak má byť interpretovaný doslova ako znak, a nie ako jeho špeciálny význam.

V konzole uvidíme výstup:

Creating strings
My friend said: "Whoever uses Python never gets bored!" And he was right.

Na tom, či budú vonkajšie úvodzovky jednoduché a vnútorné dvojité, alebo naopak, nezáleží :-)

Trojité úvodzovky

Trojité úvodzovky slúžia na vytváranie viacriadkových reťazcov. Pri jednoduchých a dvojitých úvodzovkách je možné na odriadkovanie použiť sekvenciu \n, ale pri dlhších textoch je toto riešenie nepohodlné:

message = "This is a multiline string created\nusing double quotes and the newline character."
multiline_message = '''This is also a multiline
string, but it is created using
triple quotes.'''
print(message)
print(multiline_message)

V konzole uvidíme výstup:

Creating strings
This is a multiline string created
using double quotes and the newline character.
This is also a multiline
string, but it is created using
triple quotes.

Reťazca z pohľadu logiky

Ak budeme chcieť reťazec hodnotiť z hľadiska logiky, tak prázdny reťazec sa vyhodnotí na bool hodnotu False a neprázdny na True:

empty_string = ""
language = "Python"

print(bool(empty_string))
print(bool(language))

Výstupom v konzole je:

Creating strings
False
True

Špeciálne znaky

Občas potrebujeme trochu „špeciálny“ text. Napríklad v konzole poskočiť na ďalší riadok, vytlačiť úvodzovky a podobne. Tieto špeciálne znaky zapisujeme vo vnútri reťazcov bez medzier pomocou tzv. escape sekvencií, ktoré začínajú spätným lomítkom:

  • \n – nový riadok,
  • \t – tabulátor,
  • \a – zvonček (sekvencia pre pípnutie),
  • \\ – spätná lomka sa píše ako \\, pretože jedným \ začínajú špeciálne znaky,
  • \' – jednoduché úvodzovky,
  • \" - dvojité úvodzovky.

Ukážme si príklad:

print("This string \ncontinues on a new line, skips \tone tab, prints a backslash: \\ and a single quote: \'. Then it ends.")

V konzole uvidíme:

Creating strings
This string
continues on a new line, skips  one tab, prints a backslash: \ and a single quote: '. Then it ends.

Operácia s reťazcami

S reťazcami budeme vykonávať mnoho operácií. Ako sme si povedali už v úvode lekcie, môžeme napr. určiť ich dĺžku, zlúčiť ich a replikovať. Na prácu s reťazcami existuje mnoho funkcií a metód. Poďme si predstaviť tie najdôležitejšie.

Zistenie dĺžky reťazca

Dĺžku reťazca zistíme pomocou funkcie len():

print(len("a"))
print(len("Python"))

V konzole uvidíme:

Creating strings:
1
6

Zlučovanie reťazcov

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

language = "Python"
message = " is the best!"
print(language + message)

V konzole uvidíme:

Creating strings:
Python is the best!

Replikácia

Replikácia je "množenie" reťazcov. Zadaný reťazec sa n-krát zopakuje, stačí ho "vynásobiť" číslom. My skúsime reťazec Bang! replikovať číslom 7:

string = "Bang! "
print(string * 7)

V konzole uvidíme:

Strings replication:
Bang! Bang! Bang! Bang! Bang! Bang! Bang!

Metódy startswith(), endswith() a kľúčové slovo in

Metódami sa môžeme jednoducho opýtať, či reťazec začína alebo končí alebo či obsahuje určitý podreťazec (substring). Podreťazcom myslíme časť pôvodného reťazca. Všetky tieto metódy budú samozrejme ako parameter brať podreťazec a vracať hodnoty typu bool (True / False). Na výstup zatiaľ nevieme reagovať, ale poďme si ho aspoň vypísať:

input_string = "Rhinopotamus"
print(input_string.startswith("rhin"))
print(input_string.endswith("tamus"))
print("pot" in input_string)
print("lol" in input_string)

V konzole uvidíme:

String methods:
False
True
True
False

Metódy upper() a lower()

Rozlišovanie veľkých a malých písmen môže byť niekedy na obtiaž. Veľakrát sa budeme potrebovať opýtať na prítomnosť podreťazca tak, aby na veľkosti písmen nezáležalo. Situáciu môžeme vyriešiť pomocou metód upper() a lower(), ktoré vracia reťazec veľkými alebo malými písmenami. Uveďme si reálnejší príklad, než je Rhinopotamus. V premennej budeme mať riadok konfiguračného súboru, ktorý písal používateľ. Keďže sa na vstupy od užívateľov nemožno spoľahnúť, musíme sa snažiť eliminovať možné chyby, tu napr. ohľadom veľkých písmen:

config = "Fullscreen shaDows autosave"
config = config.lower()

print("Will the game run in fullscreen?")
print("fullscreen" in config)

print("Will shadows be turned on?")
print("shadows" in config)

print("Will sound be turned off?")
print("nosound" in config)

print("Would the player like to use autosave?")
print("autosave" in config)

V konzole uvidíme:

String methods:
Will the game run in fullscreen?
True
Will shadows be turned on?
True
Will sound be turned off?
False
Would the player like to use autosave?
True

Vidíme, že sme schopní zistiť prítomnosť jednotlivých slov v reťazci tak, že si najskôr reťazec prevedieme celý na malé (resp. veľké) písmená a potom kontrolujeme prítomnosť slova len malými (resp. veľkými) písmenami. Takto by mimochodom mohlo skutočne vyzerať jednoduché spracovanie nejakého konfiguračného skriptu.

Metóda strip()

Ďalšou nástrahou môžu byť medzery a všeobecne všetky tzv. biele znaky, ktoré nie sú vidieť, ale môžu nám uškodiť. Všeobecne môže byť dobré trimovať všetky vstupy od používateľa. Skúsme si v nasledujúcej aplikácii pred číslo a za číslo zadať niekoľko medzier a metódou strip() odstrániť. Odstraňujú sa vždy biele znaky okolo reťazca, nie vo vnútri:

print("Enter a number:")
user_input = input()
print("Here's what you originally wrote: " + user_input)
print("Your text after the strip() method: " + user_input.strip())

number = int(user_input.strip())
print("I converted the text you entered to a number. Here it is: " + str(number))

V konzole uvidíme:

String methods:
Enter a number:  5
Here's what you originally wrote:   5
Your text after the strip() method: 5
I converted the text you entered to a number. Here it is: 5

Pokiaľ potrebujeme odstrániť biele znaky iba na začiatku alebo na konci reťazca, použijeme odvodené metódy lstrip() a rstrip().

Metóda replace()

Asi najdôležitejšou metódou pre dátový typ str v Pythone je nahradenie určitej časti reťazca iným textom. Ako parametre metódy replace() zadáme dvoch podreťazcov: prvý je ten, ktorý chceme nahrádzať, a druhý je ten, ktorým chceme nahradiť. Metóda vráti nový reťazec, v ktorom prebehlo nahradenie. Ak daný podreťazec metóda replace() nenájde, vráti pôvodný reťazec. Skúsme si to:

sentence = "C# is the best!"
sentence = sentence.replace("C#", "Python")
print(sentence)

V konzole uvidíme:

String methods:
Python is the best!

Je toho ešte veľa na vysvetľovanie. Existujú aj ďalšie funkcie a metódy, ktoré sme zatiaľ neprebrali. K reťazcom sa ešte vrátime neskôr v kurze ;-)

V nasledujúcom cvičení, Riešené úlohy k 5.-6. lekcii Pythona, si precvičíme nadobudnuté skúsenosti z predchádzajúcich lekcií.


 

Predchádzajúci článok
Typový systém druhýkrát - Dátové typy v Pythone
Všetky články v sekcii
Základná konštrukcia jazyka Python
Preskočiť článok
(neodporúčame)
Riešené úlohy k 5.-6. lekcii Pythona
Článok pre vás napísal gcx11
Avatar
Užívateľské hodnotenie:
15 hlasov
(^_^)
Aktivity