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