V tejto téme napíšeš prvé programy v Pythone. Zistíš, ako počítač program vykonáva, ako niečo vypísať na obrazovku, ako si do programu písať poznámky a hlavne – ako čítať chybové hlásenia, ktoré ti Python ukáže, keď sa niečo pokazí. Chyby sú pri programovaní úplne bežné; dôležité je rozumieť, čo ti hovoria.
Čo sa naučíš
- čo je program a v akom poradí ho počítač vykonáva,
- vypisovať text aj čísla príkazom
print, - písať komentáre a vypínať nimi riadky programu,
- prečítať chybové hlásenie a podľa neho chybu nájsť a opraviť.
1Program a jeho spustenie
Program je postupnosť príkazov, ktoré počítač vykoná. Príkazy musia byť zapísané presne – počítač nedomýšľa, čo sme „asi chceli“. Postup riešenia úlohy, ktorý je presný a jednoznačný, sa volá algoritmus; program je algoritmus zapísaný v programovacom jazyku.
Python je programovací jazyk, ktorý sa dobre číta a má jednoduchý zápis. Program v Pythone vykonáva interpret: číta program a vykonáva príkazy jeden po druhom. Program je obyčajný textový súbor s príponou .py (napríklad prvy_program.py). Môžeš ho písať v prostredí IDLE, Thonny alebo VS Code; na Mente aj priamo v prehliadači v časti Pieskovisko.
1.1Poradie príkazov
Príkazy sa vykonávajú zhora nadol, v poradí, v akom sú napísané. Každý príkaz píšeme na samostatný riadok.
Výstup:
Dobré ráno!
Dnes sa učíme Python.
Koniec programu.Ak riadky prehodíš, zmení sa aj výstup. Počítač robí presne to, čo je napísané, v presne tom poradí.
1.2Interaktívny režim a program v súbore
Python sa dá používať dvoma spôsobmi:
- Interaktívny režim (shell) – za výzvu
>>>napíšeš jeden príkaz alebo výraz a Python hneď ukáže výsledok. Hodí sa na rýchle vyskúšanie. - Program v súbore – napíšeš celý program, uložíš ho a spustíš. Takto vznikajú skutočné programy a takto riešiš úlohy.
Ukážka interaktívneho režimu (riadky s >>> píšeš ty, pod nimi je odpoveď Pythonu):
>>> 2 + 3 5 >>> 10 * 4 - 2 38 >>> "Ahoj" 'Ahoj'
Text shell zobrazí aj s úvodzovkami ('Ahoj'), aby bolo vidno, že ide o text; print ho vypíše bez nich.
2Výpis pomocou print()
Príkaz print vypíše na obrazovku to, čo mu dáš do zátvoriek. Po vypísaní prejde na nový riadok.
2.1Text a čísla
Text musí byť v úvodzovkách – v programovaní sa mu hovorí reťazec (anglicky string). Čísla píšeme bez úvodzoviek.
Výstup:
Ahoj, svet!
42
3.5
14
2 + 3 * 4Všimni si posledné dva riadky: bez úvodzoviek Python výraz vypočíta (násobenie má prednosť, takže 2 + 12 = 14), v úvodzovkách je to iba text, ktorý sa vypíše presne tak, ako je napísaný.
Desatinné čísla sa v Pythone píšu s bodkou, nie s čiarkou: 3.5, nie 3,5.
2.2Úvodzovky
Text môže byť v dvojitých "..." aj v jednoduchých '...' úvodzovkách – na začiatku a na konci však musia byť rovnaké. Druhý druh úvodzoviek sa hodí, keď potrebuješ úvodzovky vo vnútri textu:
Výstup:
Povedala: "Dnes píšeme test."
Rock'n'roll2.3Viac hodnôt v jednom print
Do print môžeš dať viac hodnôt oddelených čiarkou. Vypíšu sa na jeden riadok a medzi každé dve sa automaticky vloží medzera:
Výstup:
Mám 16 rokov.
Výsledok: 42
1 2 3Prázdny print() vypíše prázdny riadok – hodí sa na oddelenie častí výstupu.
2.4Nový riadok vo vnútri textu
Dvojica znakov \n znamená v texte nový riadok. Takýmto dvojiciam so spätnou lomkou sa hovorí escape sekvencie. Ďalšia užitočná je \t (tabulátor):
Výstup:
Prvý riadok
Druhý riadok
Meno: EmaDlhší text na viac riadkov sa dá zapísať aj medzi trojité úvodzovky – riadky sa vypíšu presne tak, ako sú napísané. To sa hodí napríklad na jednoduché obrázky zo znakov:
Výstup:
/\_/\
( o.o )
> ^ <2.5Ovplyvnenie medzier a koncov riadkov
print má dve nastavenia, ktoré sa často hodia:
sep– čo sa vloží medzi hodnoty (predvolene medzera),end– čo sa vypíše na konci (predvolene nový riadok).
Výstup:
1, 2, 3
Na jeden riadok pokračujem tu.Podrobnejšie sa výstupu venuje téma Vstup a výstup.
3Komentáre
Komentár je poznámka pre človeka, ktorý program číta. Začína znakom # a pokračuje až do konca riadku. Python komentáre úplne ignoruje.
Výstup:
Ahoj!
Súčet: 7Na čo sa komentáre používajú:
- vysvetlenie, prečo je niečo v programe tak, ako je (najmä pri zložitejších miestach),
- štruktúra – nadpisy častí programu (načítanie, výpočet, výpis),
- dočasné vypnutie riadku („zakomentovanie“) pri hľadaní chyby alebo skúšaní.
Dobrý komentár vysvetľuje prečo niečo robíme, nie čo je zrejmé zo samotného kódu. Komentár # vypíše Ahoj nad riadkom print("Ahoj") nič nové nepovie.
4Chybové hlásenia
Každý, kto programuje, robí chyby. Python pri chybe program zastaví a vypíše chybové hlásenie – povie, kde chyba nastala a akého druhu je. Rozlišujeme tri druhy chýb:
| Druh chyby | Kedy sa prejaví | Príklad |
|---|---|---|
syntaktická chyba (SyntaxError) | ešte pred spustením – program sa vôbec nespustí | chýba úvodzovka alebo zátvorka |
| chyba počas behu | program beží, kým nepríde na chybný riadok | neznáme meno, delenie nulou |
| logická chyba | nikdy – program beží, ale robí niečo iné, než chceme | + namiesto * vo vzorci |
Logickú chybu Python nenájde, lebo program je „správne napísaný“ – len nerobí to, čo sme chceli. Tú musíš nájsť ty, napríklad porovnaním výstupu so správnym výsledkom.
4.1Ako čítať chybové hlásenie
Pozri si program s chybou na treťom riadku:
Výstup (program skončí chybou):
Začiatok programu Výpočet: 15 Traceback (most recent call last): File "program.py", line 3, in <module> print(vysledok) ^^^^^^^^ NameError: name 'vysledok' is not defined
Hlásenie sa číta takto:
Traceback (most recent call last):– úvodný riadok hlásenia.File "program.py", line 3– chyba je v súboreprogram.pyna riadku 3. Pod tým je vypísaný samotný chybný riadok.- Posledný riadok je najdôležitejší: druh chyby (
NameError) a správa – menovysledoknie je definované. Python nevie, čo jevysledok, lebo také meno sme nikde nevytvorili. Keby to mal byť text, patril by do úvodzoviek.
Všimni si aj to, že prvé dva riadky sa vypísali. Chyba počas behu zastaví program až na chybnom riadku; posledný print sa už nevykonal.
4.2Najčastejšie chyby na začiatku
Chýbajúca úvodzovka. Text nie je ukončený:
Výstup (program skončí chybou):
File "program.py", line 1
print("Ahoj)
^
SyntaxError: unterminated string literal (detected at line 1)Neuzavretá zátvorka. Python si to všimne až na ďalšom riadku – chyba preto môže byť aj o riadok vyššie, než hovorí hlásenie:
Výstup (program skončí chybou):
File "program.py", line 1
print("Ahoj"
^
SyntaxError: '(' was never closedVeľké písmeno alebo preklep v mene príkazu. Python rozlišuje veľké a malé písmená: Print nie je to isté ako print. Novšie verzie Pythonu dokonca poradia, čo sme asi mysleli:
Výstup (program skončí chybou):
Traceback (most recent call last):
File "program.py", line 1, in <module>
Print("Ahoj")
^^^^^
NameError: name 'Print' is not definedText bez úvodzoviek. Python ho považuje za meno premennej, ktorá neexistuje:
Výstup (program skončí chybou):
Traceback (most recent call last):
File "program.py", line 1, in <module>
print(Ahoj)
^^^^
NameError: name 'Ahoj' is not definedMedzera na začiatku riadku. Odsadenie (medzery na začiatku riadku) má v Pythone význam – smie byť iba tam, kde to pravidlá jazyka vyžadujú (napríklad v podmienkach a cykloch):
Výstup (program skončí chybou):
File "program.py", line 2
print("svet")
IndentationError: unexpected indentSpájanie textu s číslom. Operátor + vie spojiť dva texty alebo sčítať dve čísla, ale nie text s číslom:
Výstup (program skončí chybou):
Traceback (most recent call last):
File "program.py", line 1, in <module>
print("Mám " + 16 + " rokov")
~~~~~~~~^~~
TypeError: can only concatenate str (not "int") to strOprava: použi čiarky (print("Mám", 16, "rokov")) alebo číslo zapíš ako text ("16").
Delenie nulou.
Výstup (program skončí chybou):
Traceback (most recent call last):
File "program.py", line 1, in <module>
print(10 / 0)
~~~^~~
ZeroDivisionError: division by zeroPrehľad najčastejších hlásení:
| Hlásenie | Čo zvyčajne znamená |
|---|---|
SyntaxError: unterminated string literal | chýba úvodzovka na konci textu |
SyntaxError: '(' was never closed | chýba zatváracia zátvorka |
NameError: name '...' is not defined | preklep v mene, chýbajúce úvodzovky alebo premenná, ktorá ešte neexistuje |
IndentationError: unexpected indent | medzera alebo tabulátor na začiatku riadku navyše |
TypeError: can only concatenate str (not "int") to str | spájanie textu s číslom cez + |
ZeroDivisionError: division by zero | delenie nulou |
4.3Postup pri hľadaní chyby
- Prečítaj posledný riadok hlásenia – druh chyby a správu.
- Pozri sa na číslo riadku. Ak je na tom riadku všetko v poriadku, skontroluj riadok nad ním (často chýba zátvorka alebo úvodzovka).
- Oprav jednu chybu a program spusti znova. Ďalšie hlásenia môžu byť len dôsledkom prvej chyby.
- Pri logickej chybe si vypisuj medzivýsledky (
print) a porovnaj ich s tým, čo si vypočítaš na papieri.
5Riešené úlohy
5.1Vizitka
Zadanie: Vypíš vizitku s menom, triedou a školou. Vizitka má byť ohraničená rámčekom zo znakov.
Riešenie: Každý riadok rámčeka je jeden print. Aby bol rámček rovný, musia mať riadky rovnakú dĺžku – medzery doplníme ručne.
Výstup:
+----------------------+
| Ema Nováková |
| trieda: 3.A |
| Gymnázium Mente |
+----------------------+5.2Stromček z hviezdičiek
Zadanie: Vypíš stromček z hviezdičiek s kmeňom.
Riešenie: Medzery na začiatku riadkov posúvajú hviezdičky do stredu.
Výstup:
*
***
*****
*******
|Písanie si môžeš skrátiť: text sa dá „vynásobiť“ číslom – "*" * 5 je päť hviezdičiek. Podrobne o tom v téme Premenné a dátové typy.
Výstup:
***
*****5.3Koľko sekúnd má deň?
Zadanie: Vypočítaj, koľko sekúnd má jeden deň a koľko jeden týždeň.
Riešenie: Deň má 24 hodín, hodina 60 minút, minúta 60 sekúnd. Python vypočíta výraz za nás; text pred výsledkom vysvetľuje, čo číslo znamená.
Výstup:
Deň má 86400 sekúnd.
Týždeň má 604800 sekúnd.5.4Oprav program
Zadanie: Program má vypísať pozdrav a súčet čísel 15 a 27, ale obsahuje tri chyby. Nájdi ich.
Riešenie: Spustenie ukáže najprv prvú chybu – na riadku 1 chýba ukončovacia úvodzovka. Po jej oprave Python nájde chýbajúcu zátvorku na riadku 3 (syntaktické chyby sa hlásia pred spustením) a po ďalšej oprave NameError pre Print s veľkým P. Opravený program:
Výstup:
Ahoj, ideme počítať!
Súčet je: 42
HotovoZhrnutie
- Program je postupnosť príkazov; Python ich vykonáva zhora nadol.
print(...)vypíše hodnoty; viac hodnôt oddeľ čiarkou (vloží sa medzera),print()vypíše prázdny riadok.- Text patrí do úvodzoviek
"..."alebo'...', čísla nie; desatinné čísla píš s bodkou. \nje nový riadok v texte;sepaendmenia oddeľovač a koniec výpisu.- Komentár začína
#– Python ho ignoruje. - Chybové hlásenie čítaj od posledného riadku (druh chyby a správa), potom pozri číslo riadku.
- Python rozlišuje veľké a malé písmená a medzery na začiatku riadku majú význam.
Úlohy na precvičenie
- Vypíš svoje meno, vek a obľúbený predmet – každý údaj na samostatný riadok.
- Vypíš jedným príkazom
printčísla 1 až 5 tak, aby boli oddelené pomlčkou:1-2-3-4-5. - Nakresli zo znakov domček (strecha z
/a\, steny z|). - Vypočítaj, koľko minút má rok (365 dní), a výsledok vypíš aj s vysvetľujúcim textom.
- Napíš program so zámernou chybou každého druhu z tabuľky a prečítaj si hlásenia.