Uživatelský vstup: input()
Zatím jsme se zaměřovali na práci s proměnnými, které slouží jako úložiště pro data, jež jsou přímo zapsána do kódu (promenna="zadana v kodu"
). Takový přístup funguje, ale naše programy nejsou příliš univerzální - vždy se spouštějí se stejnými daty a vykonávají stejný úkol. V této části se zaměříme na vytváření interaktivních programů, které mohou přijímat vstupy od uživatele během jejich běhu.
Když budeme o počítači přemýšlet ve zjednodušeném modelu vstupu, procesoru, paměti a výstupu, tak již umíme ukládat data do paměti, používat operátory pro jejich zpracování a také znáš funkci print()
pro vypsáná výsledku. Pro úplnost chybý funkce pro uživatelský vstup, input()
Uživatelský vstup
Základní funkcí pro získání uživatelského vstupu je funkce input()
. Tato funkce pozastaví provádění programu a čeká, až uživatel zadá text nebo stiskne klávesu. To, co uživatel zadá, se uloží do proměnné jako řetězec.
# Příklad: Práce s uživatelským vstupem
print("Ahoj")
print("Jak se máš?")
odpoved = input()
print("Mám se", odpoved, ".")
# Alternativní způsob:
print("Ahoj")
odpoved = input("Jak se máš?\n")
print("Mám se", odpoved, ".")
Tento kód pozdraví uživatele “Ahoj” a zeptá se, jak se má. Program se poté zastaví a čeká na odpověď, kterou následně uloží do proměnné odpoved
a vypíše ji.
Příklad: Sčítačka
Nyní si vyzkoušíme vytvořit jednoduchou kalkulačku, která požádá uživatele o zadání dvou čísel a poté je sečte.
.
.
.
.
.
.
Zamysli se nad tím, jak by mohl program vypadat? Můžná si to zkus napsat sám/sama.
.
.
.
.
.
.
Možná vaše řešení vypadá nějak takto:
# Jednoduchá kalkulačka
print("Kalkulačka")
print("Zadej dvě čísla a já je sečtu :)")
cislo1 = input("Zadej první číslo: ")
cislo2 = input("Zadej druhé číslo: ")
print("Výsledek je:", cislo1 + cislo2)
Bude tento kód fungovat správně? Pokuď ne, proč?
- Ano
- Ne
.
.
.
.
.
.
Tento kód nebude fungovat správně, pokud zadáme čísla, protože funkce input()
vrací hodnoty jako řetězce. Když sečteme dva řetězce, dojde ke zřetězení (spojení dvou řetězců), nikoliv k aritmetickému sčítání. Musíme vstup převést na čísla, abychom mohli provést matematickou operaci.
# Správná verze kalkulačky
print("Kalkulačka")
print("Zadej dvě čísla a já je sečtu :)")
cislo1 = int(input("Zadej první číslo: "))
cislo2 = int(input("Zadej druhé číslo: "))
print("Výsledek je:", cislo1 + cislo2)
Nebo takto:
# Alternativní řešení
print("Kalkulačka")
print("Zadej dvě čísla a já je sečtu :)")
cislo1 = input("Zadej první číslo: ")
cislo2 = input("Zadej druhé číslo: ")
print("Výsledek je:", int(cislo1) + int(cislo2))
Nebo pro desetinná čísla:
# Kalkulačka pro desetinná čísla
print("Kalkulačka")
print("Zadej dvě čísla a já je sečtu :)")
cislo1 = float(input("Zadej první číslo: "))
cislo2 = float(input("Zadej druhé číslo: "))
print("Výsledek je:", cislo1 + cislo2)
Pozor na chyby
I když je tento program funkční, má stále jednu slabinu – pokud uživatel místo čísla zadá text, program skončí s chybou ValueError
. Tuto problematiku vyřešíme později, ale prozatím se budeme spoléhat na to, že uživatelé budou dodržovat instrukce.
Kontrolní otázky
- Jaká je základní funkce v jazyce Python, která slouží k získání uživatelského vstupu?
- Jaký datový typ vrací funkce
input()
ve výchozím nastavení? - Jak převedete řetězcový vstup na celé číslo?
- Proč může dojít k pádu programu při sčítání dvou čísel pomocí funkce
input()
?
Kvízy
Co vrací funkce input()
?
- Celé číslo
- Float
- String
- Seznam
Jaký bude výstup následujícího kódu?
print("Ahoj, " + input("Jak se jmenuješ? ") + "!")
- Vypíše 'Ahoj, jak se jmenuješ?'. Poté čeká na vstup uživatele a vypíše 'Ahoj, [vstup]!'.
- Čeká na vstup uživatele a pak vypíše 'Ahoj, Jak se jmenuješ?!'
- Vypíše 'Jak se jmenuješ?' a čeká na vstup uživatele. Poté vypíše 'Ahoj, [vstup]!'.
- Vyhodí syntaktickou chybu.
Uvažujte o kódu:
age = int(input("Zadejte svůj věk: "))
Co se stane, když uživatel místo čísla zadá “dvacet”?
- Program pokračuje bez problému.
- Vyvolá se `TypeError`.
- Je vyvolána chyba `ValueError`.
- Program čeká na správný vstup.
Který z následujících způsobů NENÍ správný pro převod uživatelského vstupu na celé číslo?
- `číslo = int(input())`
- `num = input(); num = int(num)`
- `num = int(); num = input()`
- `num = input(); num = int(num + 1)`
Cvičení
Jednoduchý program Echo
Napište program, který přijímá vstup od uživatele a vrací jej zpět.
Kalkulátor délky řetězce
Napište program, který přečte řetězec od uživatele a zobrazí jeho délku.
Převodník řetězců
Získejte od uživatele řetězec a zobrazte jej v opačném pořadí.
text = input("Zadejte text: ")
print("Obrácený text:", text[::-1])
Program na výpočet plochy obdélníku
Vytvořte program, který vypočítá plochu obdélníku. Zeptejte se uživatele na délku a šířku a poté zobrazte výsledek.
delka = float(input("Zadejte délku obdélníku: "))
sirka = float(input("Zadejte šířku obdélníku: "))
plocha = delka * sirka
print("Plocha obdélníku je:", plocha)
Kalkulačka
Implementujte základní kalkulačku, která provede sčítání, odčítání, násobení a dělení. Poté ji vylepšete tak, aby zvládala i čísla s desetinnou čárkou.
# Základní kalkulačka
cislo1 = float(input("Zadejte první číslo: "))
cislo2 = float(input("Zadejte druhé číslo: "))
print("Výsledek sčítání je:", cislo1 + cislo2)
print("Výsledek odčítání je:", cislo1 - cislo2)
print("Výsledek násobení je:", cislo1 * cislo2)
print("Výsledek dělení je:", cislo1 / cislo2)