V programoch sa neustále pracuje s rôznymi typmi dát — číslami, textom, pravdivostnými hodnotami. Niekedy tieto typy treba zmeniť jeden na druhý. Tomuto procesu sa hovorí konverzia typov (alebo type casting).
Explicitná konverzia
Explicitná konverzia znamená, že programátor sám požiada Python o zmenu typu pomocou vstavaných funkcií:
# Reťazec na celé číslo
vek_text = "16"
vek = int(vek_text) # 16 (int)
# Reťazec na desatinné číslo
vyska_text = "170.5"
vyska = float(vyska_text) # 170.5 (float)
# Číslo na reťazec
skore = 95
skore_text = str(skore) # "95" (str)
# Číslo na booleovskú hodnotu
print(bool(0)) # False
print(bool(7)) # True
print(bool(-1)) # True
Prečo je konverzia potrebná?
Funkcia input() vždy vracia reťazec, aj keď používateľ zadá číslo:
vstup = input("Koľko jabĺk máš? ") # vráti reťazec, napr. "5"
# jabĺk + 3 = CHYBA — nemôžeš sčítať reťazec a číslo
jablka = int(vstup) # teraz je to číslo
print(jablka + 3) # 8 — funguje správne
Skrátene v jednom riadku:
jablka = int(input("Koľko jabĺk máš? "))
Konverzia typov z vstupu je jedna z najčastejšie potrebných operácií. Skoro pri každom programe, ktorý pýta číslo od používateľa, potrebuješ int() alebo float().
Implicitná konverzia
Python niekedy konvertuje typy automaticky, bez zásahu programátora:
vysledok = 5 + 2.0 # int + float → float
print(vysledok) # 7.0
print(type(vysledok)) # <class 'float'>
Python "povýšil" celé číslo na desatinné, aby sa predišlo strate presnosti.
Implicitná konverzia funguje len v "bezpečných" prípadoch — keď nie je riziko straty informácie. Python automaticky konvertuje int na float, ale nikdy napríklad str na int.
Nebezpečné konverzie
Nie každá konverzia je možná:
int("ahoj") # ValueError — "ahoj" nie je číslo
int("3.14") # ValueError — reťazec s desatinnou čiarkou
int(3.99) # 3 — možné, ale ODSEKNE desatinnú časť (nezaokrúhľuje!)
float("3,14") # ValueError — Python čaká bodku, nie čiarku
int(3.99) vráti 3, nie 4! Python jednoducho odstrihne desatinnú časť. Ak chceš zaokrúhliť, použi round(3.99), čo vráti 4.
Bezpečná konverzia s ošetrením chýb
Čo ak používateľ zadá text namiesto čísla? Program by spadol. Môžeš to ošetriť:
vstup = input("Zadaj číslo: ")
try:
cislo = int(vstup)
print(f"Zadal si číslo: {cislo}")
except ValueError:
print("Toto nie je platné celé číslo!")
Konverzia medzi kolekciami
tuple_data = (1, 2, 3)
list_data = list(tuple_data) # n-tica na zoznam
back_to_tuple = tuple(list_data) # zoznam na n-ticu
retazec = "ahoj"
znaky = list(retazec) # ['a', 'h', 'o', 'j']
print(znaky)
cisla_set = {3, 1, 4, 1, 5} # množina — bez duplikátov
print(list(cisla_set)) # [1, 3, 4, 5] (bez duplikátov, nezoradené)
Prehľadná tabuľka konverzií
| Funkcia | Vstup | Výstup | Poznámka |
|---|---|---|---|
int("42") | "42" | 42 | Funguje |
int(3.9) | 3.9 | 3 | Odsekne desatinnú časť |
float("3.14") | "3.14" | 3.14 | Funguje |
str(100) | 100 | "100" | Vždy funguje |
bool(0) | 0 | False | Nula = nepravda |
int("abc") | "abc" | Chyba | ValueError |
Cvičné príklady
Čo vypíše tento kód a prečo? a = '5'; b = '3'; print(a + b)
Zobraziť odpoveď
Napíš program, ktorý prečíta dve čísla od používateľa a vypíše ich súčet. Ošetri prípad, keď používateľ nezadá číslo.