Vianoce v ITnetwork sú tu! Dobí si teraz kredity a získaj až 80 % extra kreditov na e-learningové kurzy ZADARMO. Zisti viac.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

4. diel - Načítanie hodnôt z konzoly a parsovanie v Pythone

V minulej lekcii, Premenné a typový systém v Pythone, sme si ukázali základné dátové typy, prácu s premennou a napísali sme si jednoduchý program.

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 Parrot

Skúsme do programu zapojiť používateľov a nejako reagovať na jeho vstup. Napíšeme program Parrot, ktorý bude dvakrát opakovať to, čo používateľ napísal.

Načítanie textu z konzoly

Zatiaľ sme neskúšali z konzoly niečo načítať. Slúži na to funkcia input(), ktorá uží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 Parrot a jeho kód upravíme tak, aby vyzeral nasledovne:

print("Hi I'm Lora, the virtual parrot, and I love to repeat!")
print("Type something in: ")

text = input()
result = text + ", " + text + "!"
print(result)

To už je trochu zábavnejšie 🙂 Prvé dva riadky sú jasné (vypisujú text). V ďalšom založíme premennú text. Do premennej text sa priradí hodnota z funkcie input() získaná na konzole, teda to, čo používateľ zadal. Pre výstup si pre názornosť založíme ďalší premennú result.

Spájanie reťazcov

Zaujímavé je, ako sme do premennej result priradili hodnotu. Využili sme k tomu 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 result sme teda priradili obsah premennej text, ďalej čiarku s medzerou, znovu text 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:

Parrot program:
Hi I'm Lora, the virtual parrot, and I love to repeat!
Type something in: 

Hello parrot
Hello parrot, Hello parrot!

Program Doubler

Zdvojnásobovač si vyžiada na vstupe číslo, ktoré zdvojnásobí a vypíše. S doterajšími znalosťami by sme asi napísali niečo také:

print("Enter a number and I'll double it:")
a = input() # Let's try enter the number 12
a = a * 2
print(a)

V konzole vidíme:

Doubler program:
1212

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 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. naparsovať.

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:

s = "56"
a = int(s)

Funkcia int() berie ako parameter textový reťazec a pokúsi sa ho previesť na číslo. Využime túto znalosť v našom programe:

print("Enter a number and I'll double it:")
s = input()  # Let's stick with our number 12
a = int(s)
a = a * 2
print(a)

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:

Doubler program:
Enter a number and I'll double it:

12
24

Parsovanie sa samozrejme nemusí podariť, ak 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:

print("Welcome to calculator!")
print("Enter first number:")   # Let's try pi: 3.14
a = float(input())
print("Enter second number:")  # Let's try e: 2.72
b = float(input())
total = a + b
difference = a - b
product = a * b
quotient = a / b
print(f"Addition: {total}")
print(f"Subtraction: {difference}")
print(f"Multiplication: {product}")
print(f"Division: {quotient}")
print("Thank you for using calculator.")

A takto vyzerá výstup programu v konzole:

Simple calculator:
Welcome to calculator!
Enter first number:
3.14
Enter second number:
2.72
Addition: 5.86
Subtraction: 0.41999999999999993
Multiplication: 8.5408
Division: 1.15441176470588
Thank you for using calculator.

Použitie f-stringu

Pre jednoduchší výpis do konzoly tu používame formátovaný výpis pomocou interpolácie (alebo tiež f-string) v tvare:

print(f"text {variable}")

Táto šikovná utilita je v Pythone dostupná od verzie 3.6. V opačnom prípade by sme museli použiť pretypovanie na reťazec pomocou str(variable), čo je menej pohodlné :-) Celý riadok by totiž vyzeral takto:

print("text" + str(variable))

Práve sme sa naučili opak parsovania 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 bodkou je obmedzená a nemusí presne predstavovať reálne číslo, ktoré chceme reprezentovať. To môže viesť (a často vedie) k drobný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:

from decimal import Decimal

A na načítanie čísel použijeme Decimal miesto float:

a = Decimal(input())
b = Decimal(input())
difference = a - b
print(f"Difference: {difference}")

V konzole už vidíme očakávaný výstup:

Output using Decimal:
Difference: 0.42

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:

difference = round(a - b, 2)  #  We want to round to two decimal places, hence the 2

print(f"Difference: {difference}")

V konzole opäť vidíme očakávaný výstup:

Output after rounding:
Difference: 0.42

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é 1x (4.02 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Python

 

Predchádzajúci článok
Premenné a typový systém v 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:
24 hlasov
Karel Zaoral
Aktivity