Lekce 5 - Načítání hodnot z konzole a parsování v Pythonu
V minulé lekci, Využití umělé inteligence při studiu programování, jsme si ukázali, jak využívat umělou inteligenci při studiu programování.
V dnešním Python tutoriálu se podíváme na parsování hodnot z konzole. Výsledkem bude několik jednoduchých programů včetně kalkulačky.
Program Papoušek
Zkusme do programu zapojit uživatele a nějak reagovat na jeho vstup. Napíšeme program Papoušek, který bude dvakrát opakovat to, co uživatel napsal.
Načtení textu z konzole
Zatím jsme nezkoušeli z konzole něco načítat. Slouží k tomu funkce
input()
, která uživateli umožní zadat do konzole řádku textu
a nám vrátí zadaný textový řetězec. Abychom mohli z konzole načítat,
založíme si nový projekt s názvem Papousek
a jeho kód
upravíme tak, aby vypadal následovně:
print("Ahoj, jsem virtuální papoušek Lóra, rád opakuji!")
print("Napiš něco: ")
vstup = input()
vystup = vstup + ", " + vstup + "!"
print(vystup)
To už je trochu zábavnější 🙂 První dva řádky jsou jasné
(vypisují text). V dalším založíme proměnnou vstup
. Do
proměnné vstup
se přiřadí hodnota z funkce
input()
získaná na konzoli, tedy to, co uživatel zadal. Pro
výstup si pro názornost založíme další proměnnou vystup
.
Spojování řetězců
Zajímavé je, jak jsme do proměnné vystup
přiřadili
hodnotu. Využili jsme k tomu tzv. konkatenaci (spojování)
řetězců. Pomocí operátoru +
totiž můžeme spojit několik
textových řetězců do jednoho. Je jedno, jestli je řetězec v proměnné,
nebo jestli je explicitně zadán v uvozovkách ve zdrojovém kódu. Do
proměnné vystup
jsme tedy přiřadili obsah proměnné
vstup
, dále čárku s mezerou, znovu vstup
a poté
vykřičník. Nakonec jsme proměnnou vypsali do konzole a tím program
skončil. Podívejme se na jeho výstup v konzoli:
Program Papoušek:
Ahoj, jsem virtuální papoušek Lóra, rád opakuji!
Napiš něco:
Nazdar ptáku
Nazdar ptáku, Nazdar ptáku!
Program Zdvojnásobovač
Zdvojnásobovač si vyžádá na vstupu číslo, které zdvojnásobí a vypíše. S dosavadními znalostmi bychom asi napsali něco takového:
print("Zadejte číslo k zdvojnásobení:")
a = input() # Zkusme zadat třeba číslo 12
a = a * 2
print(a)
V předchozí ukázce jsme použili mřížku #
. Ta
se na české klávesnici píše pomocí Pravého Alt a klávesy
X:

V konzoli vidíme:
Program Zdvojnásobovač:
1212
Zdvojnásobení čísla a
jsme provedli pomocí přiřazení.
Pokud zkusíme program spustit, v konzoli se nám vypíše dvakrát námi
zadané číslo! Narážíme na fakt, že funkce input()
nám
vrací textový řetězec. Pokud se pokusíme sečíst dva
řetězce, jednoduše se oba řetězce spojí (jako když se spojují brčka).
Cokoli tedy přijde z textové konzole, je vždy text. A to i když
zadáme číslo. Abychom získali skutečně číslo, budeme ho muset
tzv. naparsovat.
Parsování
Parsováním se myslí převod z textové podoby na nějaký specifický typ,
např. číslo. Pokud budeme chtít naparsovat např. int
z typu
str
, budeme postupovat takto:
s = "56" a = int(s)
Funkce int()
bere jako parametr textový řetězec a pokusí se
ho převést na číslo. Využijme této znalosti v našem programu:
print("Zadejte číslo k zdvojnásobení:")
s = input() # Držme se našeho čísla 12
a = int(s)
a = a * 2
print(a)
Nejprve si text z konzole uložíme do textového řetězce s
.
Do proměnné a
poté uložíme číselnou hodnotu řetězce
s
. Dále hodnotu v a
zdvojnásobíme a vypíšeme do
konzole:
Program Zdvojnásobovač:
Zadejte číslo k zdvojnásobení:
12
24
Parsování se samozřejmě nemusí povést, bude-li v textu místo čísla např. slovo, ale tento případ zatím nebudeme ošetřovat.
Jednoduchá kalkulačka
Ještě jsme nepracovali s desetinnými čísly. Zkusme si tedy napsat slibovanou kalkulačku.
V následující ukázce použijeme složené závorky. Na české klávesnici se píši pomocí klávesy pravý Alt a znaku B nebo N:

Kalkulačka bude velmi jednoduchá. Na vstup přijdou dvě čísla a program poté vypíše výsledky pro sčítání, odčítání, násobení a dělení:
print("Vítejte v kalkulačce")
print("Zadejte první číslo:") # Zkusme třeba pí, tedy 3.14
a = float(input())
print("Zadejte druhé číslo:") # Zkusme třeba e, tedy 2.72
b = float(input())
soucet = a + b
rozdil = a - b
soucin = a * b
podil = a / b
print(f"Součet: {soucet}")
print(f"Rozdíl: {rozdil}")
print(f"Součin: {soucin}")
print(f"Podíl: {podil}")
print("Děkuji za použití kalkulačky!")
A takto vypadá výstup programu v konzoli:
Jednoduchá kalkulačka:
Vítejte v kalkulačce
Zadejte první číslo:
3.14
Zadejte druhé číslo:
2.72
Součet: 5.86
Rozdíl: 0.41999999999999993
Součin: 8.5408
Podíl: 1.15441176470588
Děkuji za použití kalkulačky!
Použití f-stringu
Pro jednodušší výpis do konzole zde používáme formátovaný výpis pomocí interpolace (nebo též f-string) ve tvaru:
print(f"text {proměnná}")
Tato šikovná utilita je v Pythonu dostupná od verze 3.6. V opačném
případě bychom museli použít přetypování na řetězec pomocí
str(proměnná)
, což je méně pohodlné Celý řádek by totiž vypadal
takto:
print("text" + str(proměnná))
Právě jsme se naučili opak parsování a nyní tedy v Pythonu umíme převést cokoli do textové podoby.
Desetinná čísla v Pythonu
Rozdíl čísel 3.14
a 2.72
vychází v naší
kalkulačce podivně. Očekávaný výsledek 0.42
se nedostavil
proto, že přesnost čísel s plovoucí desetinnou tečkou je omezena a
nemusí přesně představovat reálné číslo, které chceme
reprezentovat. To může vést (a často vede) k drobným zaokrouhlovacím
chybám, jako je ta, kterou vidíme v rozdílu 3.14
a
2.72
. Řešení jsou možná v jádru dvě.
Typ Decimal
Prvním řešením je použití datového typu Decimal
. Tento
typ je určen pro finanční a měnové výpočty, kde je přesnost kritická.
Je ovšem nutné jej importovat z modulu decimal. Toto sice ještě neznáme,
ale jde o jednoduchý proces. Na začátek programu napíšeme následující
řádek:
from decimal import Decimal
A k načtení čísel použijeme Decimal
místo
float
:
a = Decimal(input()) b = Decimal(input()) rozdil = a - b print(f"Rozdíl: {rozdil}")
V konzoli už vidíme očekávaný výstup:
Výstup s použitím Decimal:
Rozdíl: 0.42
Zaokrouhlení pomocí funkce
round()
Druhým řešením je použít funkci round()
pro zaokrouhlení
výsledků na požadovaný počet desetinných míst:
rozdil = round(a - b, 2) # Chceme zaokrouhlit na dvě desetinná místa, proto ta dvojka print(f"Rozdíl: {rozdil}")
V konzoli opět vidíme očekávaný výstup:
Výstup po zaokrouhlení:
Rozdíl: 0.42
Jak využití různých modulů, tak i použití matematických funkcí jsme si tu zatím pouze naznačili jako určitou bonusovou znalost. Podrobně si je vysvětlíme v dalších lekcích kurzu.
V následujícím kvízu, Kvíz - Konzole a proměnné v Pythonu, si vyzkoušíme nabyté zkušenosti z předchozích lekcí.
Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkami
Staženo 508x (3.79 kB)
Aplikace je včetně zdrojových kódů v jazyce Python