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)