Väčšina programov dostáva údaje zvonka (vstup) a výsledok niekomu ukazuje (výstup). V tejto téme sa naučíš načítať údaje z klávesnice funkciou input, správne ich premeniť na čísla a pekne naformátovať výstup – napríklad na dve desatinné miesta alebo do zarovnanej tabuľky.
Čo sa naučíš
- načítať text z klávesnice funkciou
input, - načítať celé aj desatinné čísla a viac čísel na jednom riadku,
- používať
sepaendv príkazeprint, - formátovať výstup pomocou f-reťazcov (desatinné miesta, zarovnanie).
V ukážkach je tučným písmom vyznačené to, čo sa zadá z klávesnice.
1Načítanie vstupu: input()
Funkcia input() zastaví program a čaká, kým niekto napíše riadok textu a stlačí Enter. Napísaný text potom vráti – zvyčajne ho hneď uložíme do premennej:
Výstup:
Ema
Ahoj, EmaDo zátvoriek môžeš napísať výzvu – text, ktorý sa vypíše predtým, než program začne čakať. Vďaka nej človek pri počítači vie, čo má zadať:
Výstup:
Ako sa voláš? Ema Ahoj, Ema!
Za výzvu sa oplatí dať medzeru, inak sa zadávaný text prilepí hneď za otáznik.
1.1input vždy vracia text
Nech napíšeš čokoľvek – aj číslo – input vráti reťazec (str):
Výstup:
Zadaj číslo: 42 <class 'str'> 4242
Text "42" + "42" sa spojí na "4242". Ak chceme s hodnotou počítať, musíme ju previesť na číslo.
2Čítanie čísel
Na prevod slúžia funkcie int (celé číslo) a float (desatinné číslo). Zvyčajne ich „obalíme“ priamo okolo input:
Výstup:
Prvé číslo: 12 Druhé číslo: 30 Súčet: 42 Súčin: 360
Postupnosť vykonania pri int(input()): najprv sa vykoná input() a vráti text, napríklad "12"; potom int("12") z neho urobí číslo 12.
Výstup:
Výška v metroch: 1.75 V centimetroch: 175.0
2.1Keď sa zadá niečo, čo nie je číslo
Ak niekto namiesto čísla napíše text, prevod zlyhá a program skončí chybou ValueError:
Výstup (program skončí chybou):
Zadaj číslo: dva Traceback (most recent call last): File "program.py", line 1, in <module> a = int(input("Zadaj číslo: ")) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ValueError: invalid literal for int() with base 10: 'dva'
Rovnako zlyhá int("3.5") – desatinné číslo nie je celé číslo. Ako takú chybu zachytiť a požiadať o nový vstup, sa naučíš v téme Výnimky.
2.2Viac čísel na jednom riadku
Niekedy sú na vstupe dve čísla na jednom riadku, napríklad 12 30. Metóda split() rozdelí text podľa medzier na časti (vznikne zoznam reťazcov – téma Zoznamy):
Výstup:
Zadaj dve čísla: 12 30 ['12', '30'] Súčet: 42
Kratší zápis, s ktorým sa často stretneš:
Výstup:
7 5
2map(int, ...) použije funkciu int na každú časť a a, b = ... rozdelí dve výsledné čísla do dvoch premenných. Musia byť zadané presne dve hodnoty, inak vznikne chyba.
2.3Vstup pri automatických testoch
Keď sa program na Mente kontroluje testami, vstup sa „zadá“ automaticky a porovnáva sa iba to, čo vypíše print. Výzvy v input("…") sa pri testoch nevypisujú, takže na ich presnom znení nezáleží. Na znení výstupu z print však záleží – musí zodpovedať zadaniu do písmena.
3Výpis: sep a end
Príkaz print má dve užitočné nastavenia:
sep(separator) – čo sa vloží medzi vypisované hodnoty; predvolene medzera,end– čo sa vypíše na konci; predvolene nový riadok"\n".
Výstup:
2024-10-1
abc
Počítam... hotovo!Pomocou end vypíšeš viac výsledkov na jeden riadok, aj keď ich vypisujú rôzne príkazy (v téme Cykly to využiješ veľmi často):
Výstup:
1 2 34Formátovanie: f-reťazce
F-reťazec je text, pred ktorým stojí písmeno f. Do zložených zátvoriek {} v ňom môžeš vložiť premennú alebo celý výraz – Python ich nahradí hodnotou:
Výstup:
Ján získal 47 z 60 bodov.
To je 78.33333333333333 %.4.1Počet desatinných miest
Za výraz v zátvorkách môžeš napísať dvojbodku a formát. Najčastejší je .2f – desatinné číslo na 2 desatinné miesta:
Výstup:
78.33 %
78.3 %
78 %
3.00Na rozdiel od round formát .2f vždy vypíše presne dve desatinné miesta – aj 3 ukáže ako 3.00. To sa hodí pri peniazoch.
>>> round(2.5) 2 >>> round(3.5) 4 >>> round(2.675, 2) 2.67
Posledný príklad ukazuje nepresnosť desatinných čísel: 2,675 je v počítači uložené ako o chlp menšie číslo, preto vyjde 2,67.
4.2Zarovnanie do stĺpcov
Formát môže určiť aj šírku – koľko znakov má hodnota zabrať. Znak < zarovná doľava, > doprava, ^ na stred:
Výstup:
Meno Body
Ema 47
Ján 8
Sofia 120
[ stred ]Šírku a desatinné miesta sa dajú kombinovať: {cena:>8.2f} zarovná cenu doprava na 8 znakov s 2 desatinnými miestami.
4.3Prehľad formátov
| Zápis | Význam | Príklad | Výsledok |
|---|---|---|---|
{x} | hodnota tak, ako je | f"{7/2}" | 3.5 |
{x:.2f} | 2 desatinné miesta | f"{3.14159:.2f}" | 3.14 |
{x:5} | šírka 5 znakov | f"[{42:5}]" | [ 42] |
{x:<5} | zarovnanie doľava | f"[{'ab':<5}]" | [ab ] |
{x:>5} | zarovnanie doprava | f"[{'ab':>5}]" | [ ab] |
{x:^5} | na stred | f"[{'ab':^5}]" | [ ab ] |
{x:03} | doplniť nulami na šírku 3 | f"{7:03}" | 007 |
Čísla sa pri zadanej šírke zarovnávajú doprava, text doľava.
5Riešené úlohy
5.1Obdĺžnik
Zadanie: Načítaj dĺžky strán obdĺžnika (môžu byť desatinné) a vypíš jeho obvod a obsah na 2 desatinné miesta.
Riešenie: Strany čítame cez float, lebo môžu byť desatinné. Výsledky formátujeme cez .2f.
Výstup:
Strana a: 4.5 Strana b: 2 Obvod: 13.00 Obsah: 9.00
5.2Prevod teploty
Zadanie: Načítaj teplotu v stupňoch Celzia a vypíš ju v stupňoch Fahrenheita na jedno desatinné miesto. Platí F = C · 9/5 + 32.
Výstup:
Teplota v °C: 21.5 21.5 °C = 70.7 °F
5.3Účet v reštaurácii
Zadanie: Načítaj sumu na účte a počet ľudí. K sume sa pridá 10 % prepitné. Vypíš celkovú sumu a koľko zaplatí každý, na centy.
Riešenie: Prepitné je 10 % zo sumy, celková suma je teda suma * 1.10. Deliť budeme počtom ľudí (celé číslo, preto int).
Výstup:
Suma na účte: 86.40 Počet ľudí: 4 Spolu s prepitným: 95.04 € Na osobu: 23.76 €
5.4Rok narodenia
Zadanie: Načítaj meno a rok narodenia. Vypíš, koľko rokov bude mať človek na konci roka 2026.
Výstup:
Meno: Sofia Rok narodenia: 2009 Sofia bude mať na konci roka 2026 17 rokov.
5.5Tabuľka s cenami
Zadanie: Vypíš zarovnanú tabuľku troch položiek s cenami a celkovú sumu.
Výstup:
Položka Cena
-----------------------
Chlieb 1.89
Mlieko 0.99
Jablká (1 kg) 2.40
-----------------------
Spolu 5.286Časté chyby
- Zabudnutý prevod na číslo.
a = input()a potoma + 1skončí chybouTypeError– text a číslo sa nedajú sčítať. Pri dvoch textoch chyba nevznikne, ale"2" + "3"je"23", nie 5. - Prevod na zlý typ. Ak môže byť vstup desatinný, použi
float, nieint. - Chýbajúce
fpred f-reťazcom. Bez neho sa zátvorky vypíšu doslova:
Výstup:
Mám {body} bodov.
Mám 10 bodov.- Výstup sa nezhoduje so zadaním. Pri automatickom testovaní záleží na každom znaku – na medzerách, interpunkcii aj na počte desatinných miest.
Zhrnutie
input("výzva")vypíše výzvu, počká na riadok textu a vráti ho ako reťazec.- Čísla čítaj ako
int(input())alebofloat(input()); nečíselný vstup spôsobíValueError. - Viac hodnôt na riadku:
input().split(); dve celé čísla:a, b = map(int, input().split()). print(..., sep="…", end="…")mení oddeľovač a koniec riadku.- F-reťazec:
f"text {výraz}"; formát za dvojbodkou:.2f(desatinné miesta),<,>,^(zarovnanie), číslo (šírka). rounda.0fzaokrúhľujú presnú polovicu k párnemu číslu.
Úlohy na precvičenie
- Načítaj tri celé čísla (každé na samostatnom riadku) a vypíš ich súčet a priemer na 2 desatinné miesta.
- Načítaj cenu výrobku a zľavu v percentách; vypíš cenu po zľave na centy.
- Načítaj dve čísla na jednom riadku a vypíš ich v opačnom poradí oddelené čiarkou.
- Načítaj počet minút a vypíš ho v tvare „X h Y min“ (pomôže
//a%z témy Operátory). - Vypíš zarovnanú tabuľku troch mien a výšok v metroch na dve desatinné miesta.