4. diel - Načítanie hodnôt z konzoly a parsovania v Pythone
V predchádzajúcom cvičení, Riešené úlohy k 1. a 2. lekcii Pythone, sme si precvičili získané skúsenosti z predchádzajúcich lekcií.
V dnešnom Python tutoriále sa pozrieme na parsovanie hodnôt z konzoly. Výsledkom bude niekoľko jednoduchých programov vrátane kalkulačky.
Program Papagáj
Skúsme do programu zapojiť používateľov a nejako reagovať na jeho vstup. Napíšeme program papagáj, ktorý bude dvakrát opakovať to, čo používateľ napísal.
Načítanie textu z konzoly
Ešte sme neskúšali z konzoly nič načítať. Slúži na to funkcia
input()
, ktorá používateľovi umožní zadať do konzoly riadok
textu a nám vráti zadaný textový reťazec. Aby sme mohli z konzoly
načítať, založíme si nový projekt s názvom Papousek
a jeho
kód upravíme tak, aby vyzeral takto:
To už je trochu
zábavnejšie 🙂 Prvé dva riadky sú jasné (vypisujú text). V ďalšom
založíme premennú vstup
. Do premennej vstup
sa
priradí hodnota z funkcie input()
získaná na konzole, teda to,
čo používateľ zadal. Pre výstup si pre názornosť zakladáme ďalší
premenný vystup
.
Spájanie reťazcov
Zaujímavé je, ako sme do premennej vystup
priradili hodnotu.
Využili sme na to tzv. konkatenáciu (spájanie) reťazcov.
Pomocou operátora +
totiž môžeme spojiť niekoľko textových
reťazcov do jedného. Je jedno, či je reťazec v premennej, alebo či je
explicitne zadaný v úvodzovkách v zdrojovom kóde. Do premennej
vystup
sme teda priradili obsah premennej vstup
,
ďalej čiarku s medzerou, znovu vstup
, a potom výkričník.
Nakoniec sme premennú vypísali do konzoly a tým program skončil. Pozrime sa
na jeho výstup v konzole:
Program zdvojnásobovač
Zdvojnásobovač si vyžiada na vstupe číslo, ktoré zdvojnásobí a vypíše. Asi by sme s doterajšími znalosťami napísali niečo také:
V konzole vidíme:
Zdvojnásobenie čísla a
sme vykonali pomocou priradenia.
Pokiaľ skúsime program spustiť, v konzole sa nám vypíše dvakrát nami
zadané číslo! Narážame na fakt, že funkcia input()
nám
vracia textový reťazec. Pokiaľ sa pokúsime sčítať dva
reťazce, jednoducho sa oba reťazce spoja (ako keď sa spájajú slamky).
Čokoľvek teda príde z textovej konzoly je vždy text. A to aj keď
zadáme číslo. Aby sme získali skutočne číslo, budeme ho musieť
tzv. naparzovať.
Parsovanie
Parsovaním sa myslí prevod z textovej podoby na nejaký špecifický typ,
napr. číslo. Pokiaľ budeme chcieť naparsovať napr. int
z typu
str
, budeme postupovať takto:
Funkcia int()
berie ako parameter textový reťazec a pokúsi sa ho previesť na číslo.
Využijeme túto znalosť v našom programe:
Najprv si text z konzoly
uložíme do textového reťazca s
. Do premennej a
potom uložíme číselnú hodnotu reťazca s
. Ďalej hodnotu v
a
zdvojnásobíme a vypíšeme do konzoly:
Parsovanie sa samozrejme nemusí podariť, keď bude v texte namiesto čísla napr. slovo, ale tento prípad zatiaľ nebudeme ošetrovať.
Jednoduchá kalkulačka
Ešte sme nepracovali s desatinnými číslami. Skúsme si teda napísať sľubovanú kalkulačku. Bude veľmi jednoduchá. Na vstup prídu dve čísla a program potom vypíše výsledky pre sčítanie, odčítanie, násobenie a delenie:
A takto vyzerá výstup programu v konzole:
Použitie F-string
Pre jednoduchší výpis do konzoly tu používame formátovaný výpis pomocou interpolácie (alebo tiež F-String) v tvare:
Táto šikovná utilita je v
Pythone od verzie 3.6. V opačnom prípade by sme museli použiť pretypovanie
na reťazec pomocou str(proměnná)
, čo je menej pohodlné:-)
Celý riadok by totiž vyzeral takto:
Práve sme sa naučili opak k parsovaniu a teraz teda v Pythone vieme previesť čokoľvek do textovej podoby.
Desatinné čísla v Pythone
Rozdiel čísel 3.14
a 2.72
vychádza v našej
kalkulačke podivne. Očakávaný výsledok 0.42
sa nedostavil
preto, že presnosť čísel s plávajúcou desatinnou čiarkou je obmedzená a
nemusí presne predstavovať reálne číslo, ktoré chceme
reprezentovať. To môže viesť (a často vedie) k malým zaokrúhľovacím
chybám, ako je tá, ktorú vidíme v rozdiele 3.14
a
2.72
. Riešenia sú možno v jadre dve.
Typ Decimal
Prvým riešením je použitie dátového typu Decimal
. Tento
typ je určený pre finančné a menové výpočty, kde je presnosť kritická.
Je však nutné ho importovať z modulu decimal. Toto síce ešte nepoznáme,
ale ide o jednoduchý proces. Na začiatok programu napíšeme nasledujúci
riadok:
A na načítanie čísel
použijeme Decimal
miesto float
:
V konzole už vidíme očakávaný výstup:
Zaokrúhlenie pomocou funkcie
round()
Druhým riešením je použiť funkciu round()
na zaokrúhlenie
výsledkov na požadovaný počet desatinných miest:
V konzole opäť vidíme očakávaný výstup:
Ako využitie rôznych modulov, tak aj použitie matematických funkcií, sme si tu zatiaľ iba naznačili ako určitú bonusovú znalosť. Podrobne si ich vysvetlíme v ďalších lekciách kurzu.
V nasledujúcom kvíze, Kvíz - Konzoly a premenné v Pythone, si vyskúšame nadobudnuté skúsenosti z predchádzajúcich lekcií.
Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 211x (3.79 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Python