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í.

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

 

Predchádzajúci článok
Riešené úlohy k 1. a 2. lekcii Pythone
Všetky články v sekcii
Základné konštrukcie jazyka Python
Preskočiť článok
(neodporúčame)
Kvíz - Konzoly a premenné v Pythone
Článok pre vás napísal Karel Zaoral
Avatar
Užívateľské hodnotenie:
9 hlasov
Karel Zaoral
Aktivity