Poznámky k téme

Maturitná príprava

Prehľad, ťahák a postup pri riešení úloh

~13 min čítania13 príkladov na spustenie

Každý príklad si môžeš spustiť priamo tu – a potom upraviť kód a skúsiť, čo sa zmení. Tvoj kód beží iba v tomto prehliadači, v izolovanom prostredí bez prístupu k internetu či k tvojmu účtu.

Tieto poznámky sú sprievodcom témou Maturitná príprava. Obsahujú ťahák najdôležitejších príkazov Pythonu na jednom mieste, programátorské vzory, ktoré sa v úlohách opakujú stále dokola, a riešené úlohy v štýle praktickej časti maturity. Podrobný výklad každej oblasti nájdeš v poznámkach k jednotlivým témam (Reťazce, Zoznamy, Cykly, Výnimky, Grafika v tkinteri…).

Čo nájdeš v tejto téme

LekciaČo precvičujePoznámky na zopakovanie
Reťazceindexy, rezy, metódy, prechádzanie textu, šifryReťazce, Cykly
Zoznamynáhodné zoznamy, hľadanie, triedenie, štatistikaZoznamy, Algoritmy, Množiny
Cyklus whileopakovanie s podmienkou, postupnosti, prevodyCykly, Operátory
Mix úlohkombinácia všetkého, rozklad na funkcieFunkcie, Modulárny program, Algoritmické úlohy
Grafika v tkinterikreslenie, udalosti, animácia, ovládacie prvkyGrafika v tkinteri
Výnimkybezpečný vstup, ošetrenie chýbVýnimky, Práca so súbormi

1Ako riešiť praktickú úlohu

  1. Prečítaj zadanie dvakrát a podčiarkni: čo je na vstupe, čo má byť na výstupe a v akom presnom tvare.
  2. Vyskúšaj príklad ručne – na papieri, s malými číslami.
  3. Rozdeľ úlohu na časti (načítanie – výpočet – výpis) a každú zapíš ako funkciu.
  4. Programuj po kúskoch a priebežne spúšťaj. Pomocné výpisy na konci odstráň.
  5. Otestuj hraničné prípady: prázdny vstup, jeden prvok, nula, záporné čísla, rovnaké hodnoty.
  6. Skontroluj tvar výstupu – medzery, veľké a malé písmená, počet desatinných miest.

1.1Ako sa úlohy na Mente kontrolujú

  • Testy porovnávajú iba výstup príkazu print – výzvy v input("…") sa pri testoch nevypisujú.
  • Ak zadanie predpisuje funkcie (napr. vygeneruj(), spracuj(zoznam)), testy ich volajú priamo. Hlavný program (načítanie a výpis) vtedy patrí pod if __name__ == "__main__":, aby sa pri testovaní funkcií nespúšťal.
  • Pri náhodných úlohách sa generovanie a spracovanie oddeľujú do rôznych funkcií: spracovanie sa dá otestovať s pevnými údajmi a pri generátore sa kontrolujú vlastnosti (počet, rozsah, rôznosť), nie konkrétne čísla.
import random
​
def vygeneruj(n):
return [random.randint(1, 100) for _ in range(n)]
​
def spracuj(zoznam):
return max(zoznam) - min(zoznam)
​
if __name__ == "__main__":
cisla = vygeneruj(10)
print(cisla)
print("Rozpätie:", spracuj(cisla))

2Ťahák: Python v kocke

2.1Vstup, výstup, typy

ZápisVýznam
x = input("Výzva: ")načíta riadok ako reťazec
n = int(input()), x = float(input())načíta celé / desatinné číslo
a, b = map(int, input().split())dve celé čísla na jednom riadku
cisla = [int(c) for c in input().split()]zoznam čísel z jedného riadku
print(a, b, sep=", ", end="")výpis s oddeľovačom, bez nového riadku
print(f"{x:.2f} {meno:<10} {n:>5}")2 desatinné miesta, zarovnanie doľava a doprava
int("42"), str(42), float("2.5"), round(x, 2)prevody a zaokrúhlenie

2.2Operátory

OperátorVýznamPríklad
/, //, %, **delenie, celočíselné delenie, zvyšok, mocnina17 // 5 je 3, 17 % 5 je 2
==, !=, <, <=, >, >=porovnania1 <= x <= 10
and, or, notlogické spojkyx % 2 == 0 and x > 0
in, not invýskyt v reťazci, zozname, množine, kľúčoch slovníka"a" in slovo
+=, -=, *= …skrátené priradeniesucet += x

2.3Riadenie behu programu

if podmienka:
...
elif ina_podmienka:
...
else:
...
​
for i in range(od, do, krok): # do už nepatrí
...
for prvok in zoznam_alebo_text:
...
while podmienka:
...
break # ukončí cyklus
continue # skočí na ďalšie opakovanie
​
def funkcia(a, b=0): # b má predvolenú hodnotu
return a + b

2.4Reťazce

ZápisVýznam
s[0], s[-1], s[2:5], s[::-1]prvý, posledný znak, rez, obrátený text
len(s), s.count("a"), s.find("x")dĺžka, počet výskytov, index (alebo −1)
s.upper(), s.lower(), s.strip(), s.replace(a, b)nový upravený reťazec
s.split(), s.split(";"), " ".join(zoznam)rozdelenie na zoznam, spojenie
s.isdigit(), s.isalpha(), s.isupper()testy znakov
ord("a"), chr(97)kód znaku a znak z kódu

2.5Zoznamy, n-tice, množiny, slovníky

ZápisVýznam
z.append(x), z.insert(i, x), z.pop(), z.remove(x)pridanie, vloženie, odobratie
z.sort(), sorted(z, reverse=True), z.reverse()triedenie (na mieste / nový zoznam)
len(z), sum(z), min(z), max(z), z.count(x), z.index(x)základné funkcie
[x * 2 for x in z if x > 0]generátorový zápis
a, b = b, avýmena hodnôt (n-tica)
set(z), a & b, a | b, a - bmnožina, prienik, zjednotenie, rozdiel
d[k] = v, d.get(k, 0), k in d, d.items()slovník: zápis, bezpečné čítanie, prechádzanie

2.6Súbory, výnimky, moduly

with open("data.txt", encoding="utf-8") as f: # čítanie
for riadok in f:
casti = riadok.strip().split(";")
​
with open("vystup.txt", "w", encoding="utf-8") as f: # zápis
f.write("text\n")
​
try:
n = int(input())
except ValueError:
print("To nie je číslo.")
​
import random, math
random.randint(1, 6); random.choice(z); random.shuffle(z); random.seed(1)
math.sqrt(2); math.pi; math.floor(x); math.ceil(x); math.gcd(a, b)

3Programátorské vzory

Väčšina úloh sa skladá z niekoľkých stále rovnakých „stavebných kameňov“. Keď ich poznáš, riešenie skladáš ako stavebnicu.

3.1Načítavanie, kým nepríde ukončovacia hodnota

Python
cisla = []
while True:
x = int(input())
if x == -1: # ukončovacia hodnota do výsledku nepatrí
break
cisla.append(x)
print(cisla)

Výstup:

12
7
30
-1
[12, 7, 30]

3.2Počítadlo, súčet a priemer s podmienkou

Python
z = [12, -4, 7, 0, 15, -9, 8]
kladne = [x for x in z if x > 0]
print("počet kladných:", len(kladne))
print("súčet kladných:", sum(kladne))
print("priemer kladných:", round(sum(kladne) / len(kladne), 2) if kladne else "-")

Výstup:

počet kladných: 4
súčet kladných: 42
priemer kladných: 10.5

3.3Maximum a jeho pozícia

Python
z = [12, 47, 3, 47, 21]
najvacsie = max(z)
pozicie = [i for i in range(len(z)) if z[i] == najvacsie]
print(najvacsie, "na pozíciách", pozicie)

Výstup:

47 na pozíciách [1, 3]

3.4Existuje? Platí pre všetky?

Python
z = [4, 8, 15, 16, 23, 42]
print("existuje nepárne:", any(x % 2 == 1 for x in z))
print("všetky kladné:", all(x > 0 for x in z))
​
je_tam = False # to isté s príznakom
for x in z:
if x > 40:
je_tam = True
break
print("existuje väčšie ako 40:", je_tam)

Výstup:

existuje nepárne: True
všetky kladné: True
existuje väčšie ako 40: True

3.5Frekvencia výskytov

Python
z = [3, 1, 3, 2, 3, 1]
pocty = {}
for x in z:
pocty[x] = pocty.get(x, 0) + 1
print(pocty)
najcastejsie = max(pocty, key=pocty.get)
print("najčastejšie:", najcastejsie, pocty[najcastejsie], "krát")

Výstup:

{3: 3, 1: 2, 2: 1}
najčastejšie: 3 3 krát

3.6Bez opakovania, v pôvodnom poradí

Python
z = [5, 3, 5, 1, 3, 8]
bez_opakovania = []
for x in z:
if x not in bez_opakovania:
bez_opakovania.append(x)
print(bez_opakovania)

Výstup:

[5, 3, 1, 8]

3.7Bezpečné načítanie čísla

Python
while True:
try:
n = int(input("Zadaj celé číslo: "))
break
except ValueError:
print("To nie je celé číslo.")
print("Mám", n)

Výstup:

Zadaj celé číslo: dva
To nie je celé číslo.
Zadaj celé číslo: 7
Mám 7

3.8Náhodný zoznam

Python
import random
​
z = [random.randint(1, 20) for _ in range(12)]
print(z)
print("párne:", [x for x in z if x % 2 == 0])
print("zoradený bez opakovania:", sorted(set(z)))

Výstup:

[20, 9, 12, 17, 1, 15, 8, 2, 6, 4, 12, 16]
párne: [20, 12, 8, 2, 6, 4, 12, 16]
zoradený bez opakovania: [1, 2, 4, 6, 8, 9, 12, 15, 16, 17, 20]

3.9Skladanie nového textu

Python
text = "Maturita z informatiky 2026"
novy = ""
for znak in text:
if znak.isdigit():
novy += "#"
elif znak in "aeiouy":
novy += znak.upper()
else:
novy += znak
print(novy)

Výstup:

MAtUrItA z InfOrmAtIkY ####

4Riešené úlohy

4.1Kontrola čísla ISBN-10

Zadanie: Kniha má 10-miestne číslo ISBN. Je platné, ak súčet cifier vynásobených váhami 10, 9, 8, …, 1 je deliteľný 11. Posledný znak môže byť aj X, ktorý znamená 10. Napíš funkciu je_platne_isbn(isbn); pomlčky v zápise ignoruj.

Postup: odstránime pomlčky, overíme dĺžku a znaky, potom v cykle sčítame súčiny cifier a váh. Váha prvej cifry je 10, posledná má váhu 1 – teda 10 - i pre index i.

Python
def je_platne_isbn(isbn):
isbn = isbn.replace("-", "")
if len(isbn) != 10:
return False
sucet = 0
for i in range(10):
znak = isbn[i]
if znak.isdigit():
hodnota = int(znak)
elif znak == "X" and i == 9:
hodnota = 10
else:
return False
sucet += (10 - i) * hodnota
return sucet % 11 == 0
​
testy = ["80-7178-506-0", "0-306-40615-2", "0-306-40615-3", "123456789X", "12345"]
for isbn in testy:
print(f"{isbn:<15} {je_platne_isbn(isbn)}")

Výstup:

80-7178-506-0   False
0-306-40615-2   True
0-306-40615-3   False
123456789X      True
12345           False

Hraničné prípady v testoch: zlá dĺžka, X na zlom mieste, iný znak ako číslica.

4.2Štatistika hodov kockou

Zadanie: Program sa opýta na počet hodov, „hodí“ kockou a vypíše, koľkokrát padla každá strana (aj ako riadok hviezdičiek), ktorá strana padla najčastejšie a priemer hodov. Rozdeľ program na funkcie hody(n), pocty(zoznam) a hlavný program.

Python
import random
​
def hody(n):
return [random.randint(1, 6) for _ in range(n)]
​
def pocty(zoznam):
vysledok = {strana: 0 for strana in range(1, 7)}
for h in zoznam:
vysledok[h] += 1
return vysledok
​
if __name__ == "__main__":
n = int(input("Počet hodov: "))
z = hody(n)
p = pocty(z)
for strana in range(1, 7):
print(f"{strana}: {'*' * p[strana]:<12} {p[strana]}")
print("najčastejšie:", max(p, key=p.get))
print(f"priemer: {sum(z) / n:.2f}")

Výstup:

Počet hodov: 30
1: ******       6
2: ***          3
3: ******       6
4: ****         4
5: ******       6
6: *****        5
najčastejšie: 1
priemer: 3.53

{strana: 0 for strana in range(1, 7)} je generátorový zápis slovníka – vytvorí slovník so všetkými stranami a počtom 0. Funkciu pocty možno otestovať aj bez náhody: pocty([1, 1, 6]) musí dať 2 pre stranu 1 a 1 pre stranu 6. Ak padlo viac strán rovnako často (tu strany 1, 3 a 5), max vráti tú, ktorá je v slovníku prvá.

4.3Teploty zo súboru

Zadanie: V súbore je na každom riadku dátum a teplota oddelené bodkočiarkou. Niektoré riadky sú poškodené. Vypíš priemernú teplotu, najteplejší deň a počet dní nad priemerom; poškodené riadky preskoč a vypíš ich čísla.

Súbor teploty.txt:

1.10.;12.5
2.10.;14.0
3.10.;chyba
4.10.;9.5

5.10.;17.0
6.10.;15.5
Python
zaznamy = []
poskodene = []
with open("teploty.txt", encoding="utf-8") as f:
for cislo, riadok in enumerate(f, start=1):
try:
datum, teplota = riadok.strip().split(";")
zaznamy.append((datum, float(teplota)))
except ValueError:
poskodene.append(cislo)
​
teploty = [t for _, t in zaznamy]
priemer = sum(teploty) / len(teploty)
najteplejsi = max(zaznamy, key=lambda z: z[1])
print(f"priemer: {priemer:.2f} °C")
print(f"najteplejšie: {najteplejsi[0]} ({najteplejsi[1]} °C)")
print("dní nad priemerom:", len([t for t in teploty if t > priemer]))
print("poškodené riadky:", poskodene)

Výstup:

priemer: 13.70 °C
najteplejšie: 5.10. (17.0 °C)
dní nad priemerom: 3
poškodené riadky: [3, 5]

Jeden blok try pokryje obe chyby: riadok bez bodkočiarky (split vráti iný počet častí a rozbalenie zlyhá s ValueError) aj text namiesto čísla (float vyvolá ValueError). Prázdny riadok (riadok 5) je tiež poškodený.

4.4Grafika: graf teplôt

Zadanie: Údaje z predchádzajúcej úlohy zobraz ako stĺpcový graf v tkinteri: výška stĺpca zodpovedá teplote (10 pixelov na stupeň), pod stĺpcom je dátum.

Python · tkinter
import tkinter
​
zaznamy = [("1.10.", 12.5), ("2.10.", 14.0), ("4.10.", 9.5),
("5.10.", 17.0), ("6.10.", 15.5)]
​
platno = tkinter.Canvas(width=330, height=230, bg="white")
platno.pack()
zaklad = 200 # y vodorovnej osi
platno.create_line(20, zaklad, 320, zaklad)
for i, (datum, t) in enumerate(zaznamy):
x = 35 + i * 58
vyska = t * 10
platno.create_rectangle(x, zaklad - vyska, x + 40, zaklad,
fill="tomato" if t == 17.0 else "steelblue")
platno.create_text(x + 20, zaklad - vyska - 8, text=str(t))
platno.create_text(x + 20, zaklad + 14, text=datum)
platno.mainloop()

Okno programu:

Okno programu

Os y plátna smeruje nadol, preto vrch stĺpca je zaklad - vyska.

5Kontrolný zoznam pred odovzdaním

  • Robí program to, čo chce zadanie – nie viac, nie menej?
  • Zodpovedá výstup presne požadovanému tvaru (texty, medzery, desatinné miesta)?
  • Funguje program aj pre hraničné vstupy (prázdny, jeden prvok, nula, záporné, rovnaké hodnoty)?
  • Sú čísla zo vstupu prevedené na int či float?
  • Majú funkcie, ktoré zadanie predpisuje, presne požadované meno a parametre a vracajú výsledok cez return?
  • Je hlavný program pod if __name__ == "__main__": (ak úloha testuje funkcie)?
  • Sú odstránené pomocné výpisy?
  • Je program čitateľný – výstižné mená premenných, komentáre pri zložitejších miestach?

Úlohy na precvičenie

  1. Napíš funkciu, ktorá overí platnosť čísla ISBN-13 (váhy sa striedajú 1 a 3, súčet musí byť deliteľný 10).
  2. Vygeneruj 20 náhodných čísel od 1 do 50 a vypíš tie, ktoré sú väčšie ako priemer, zoradené zostupne.
  3. Načítavaj slová, kým sa nezadá prázdny riadok; vypíš najdlhšie slovo a počet slov začínajúcich samohláskou.
  4. Zo súboru s riadkami meno;body vypíš poradie podľa bodov a mená s rovnakým počtom bodov zoraď abecedne.
  5. Nakresli v tkinteri graf výsledkov z úlohy 4 – vodorovné stĺpce s menami vľavo.
  6. Prejdi lekcie témy Maturitná príprava na Mente a pri každej úlohe si najprv napíš plán podľa postupu vyššie.

Prečítané?

Over si, čo si z poznámok pamätáš, na krátkych úlohách k téme.