Programy pracujú s údajmi – s vekom, cenou, menom, výsledkom výpočtu. Aby sme si údaj mohli zapamätať a neskôr ho použiť, uložíme ho do premennej. Každý údaj má zároveň typ: celé číslo, desatinné číslo, text alebo logická hodnota. Typ určuje, čo sa s údajom dá robiť – čísla sa dajú sčítať, text sa dá spájať.
Čo sa naučíš
- vytvoriť premennú, zmeniť jej hodnotu a správne ju pomenovať,
- rozlíšiť typy
int,float,strabool, - zistiť typ hodnoty funkciou
type, - prevádzať hodnoty medzi typmi (
int,float,str) a vyhnúť sa typickým chybám.
1Premenné a priradenie
Premenná je meno, pod ktorým si program pamätá hodnotu. Hodnotu do premennej uložíme priradením:
Výstup:
Ema má 16 rokov.Znak = v programovaní neznamená rovnosť ako v matematike. Je to príkaz: vypočítaj, čo je vpravo, a ulož to pod meno, ktoré je vľavo. Preto je úplne správny aj zápis, ktorý by v matematike nedával zmysel:
Výstup:
15Pri novom priradení sa stará hodnota prepíše – premenná si pamätá vždy iba poslednú hodnotu.
1.1Trasovanie: ako sa menia hodnoty
Keď chceš pochopiť, čo program robí, prejdi ho riadok po riadku a zapisuj si hodnoty premenných do tabuľky. Tomuto postupu sa hovorí trasovanie.
Výstup:
9 5| po riadku | a | b | čo sa stalo |
|---|---|---|---|
| 1 | 3 | – | a dostane hodnotu 3 |
| 2 | 3 | 6 | b = 3 · 2 |
| 3 | 9 | 6 | a = 3 + 6 – stará hodnota a sa prepíše |
| 4 | 9 | 5 | b = 6 − 1 |
1.2Pravidlá pre mená premenných
- Meno sa skladá z písmen, číslic a podčiarkovníka
_. - Nesmie začínať číslicou (
2pokusje chyba,pokus2je v poriadku) a nesmie obsahovať medzeru. - Python rozlišuje veľké a malé písmená:
vek,VekaVEKsú tri rôzne premenné. - Nesmie to byť kľúčové slovo jazyka, napríklad
if,for,while,def,True,class,in.
Odporúčania, vďaka ktorým sa program dobre číta:
- voľ výstižné mená:
cena_spolupovie viac nežx; - píš malými písmenami a slová oddeľuj podčiarkovníkom:
pocet_ziakov(tzv. snake_case); - vyhni sa diakritike v menách (
dlzka, niedĺžka) – Python ju síce povolí, ale na inej klávesnici sa ťažko píše.
1.3Viac priradení naraz
Výstup:
0 0 5 8Druhý zápis (rozbaľovanie) sa podrobnejšie preberá v téme N-tice.
1.4Premenná musí existovať skôr, než ju použiješ
Výstup (program skončí chybou):
Traceback (most recent call last):
File "program.py", line 1, in <module>
print(skore)
^^^^^
NameError: name 'skore' is not definedPython vykonáva príkazy zhora nadol, takže na prvom riadku premenná skore ešte neexistuje.
2Čísla: int a float
Python rozlišuje dva základné číselné typy:
| Typ | Význam | Príklady |
|---|---|---|
int (integer) | celé číslo | 0, 42, -7, 1000000 |
float (floating point) | desatinné číslo | 3.14, -0.5, 2.0, 1e6 (= 1 000 000.0) |
Celé čísla môžu byť v Pythone ľubovoľne veľké:
>>> 2 ** 100 1267650600228229401496703205376 >>> 7 / 2 3.5 >>> 6 / 3 2.0 >>> 7 // 2 3 >>> 2 + 1.5 3.5
Dôležité pravidlá:
- Operátor
/(delenie) dáva vždyfloat, aj keď vyjde celé číslo:6 / 3je2.0. - Celočíselné delenie
//dáva pri celých číslachint(7 // 2je3). - Ak sa vo výpočte stretne
intsfloat, výsledok jefloat.
Podrobný prehľad operátorov nájdeš v téme Operátory.
2.1Desatinné čísla nie sú vždy presné
Počítač ukladá desatinné čísla v dvojkovej sústave, a tak niektoré čísla (napríklad 0,1) nevie uložiť úplne presne. Prejaví sa to drobnými odchýlkami:
>>> 0.1 + 0.2 0.30000000000000004 >>> round(0.1 + 0.2, 2) 0.3 >>> 0.1 + 0.2 == 0.3 False
Pri výpise preto výsledok zaokrúhli (round(x, 2)) a desatinné čísla nikdy neporovnávaj presne cez == – porovnávaj zaokrúhlené hodnoty alebo či je rozdiel veľmi malý.
2.2Užitočné funkcie pre čísla
>>> abs(-8) 8 >>> round(3.14159, 2) 3.14 >>> round(2.7) 3 >>> max(4, 9, 2) 9 >>> min(4, 9, 2) 2
3Text: typ str
Text sa v Pythone volá reťazec (typ str, z anglického string). Píše sa do úvodzoviek. Aj prázdny text "" je reťazec – iba nemá žiadne znaky.
>>> "Ahoj" + " " + "Ema" 'Ahoj Ema' >>> "ha" * 3 'hahaha' >>> len("Python") 6 >>> len("") 0
+dva reťazce spojí,*reťazec zopakuje ("ha" * 3je"hahaha"),lenvráti počet znakov (aj medzery a interpunkcia sú znaky).
3.1Číslo verzus text
5 a "5" sú dve úplne odlišné hodnoty – prvá je číslo, druhá je text s jedným znakom:
Výstup:
10
55
555
15S reťazcami sa toho dá robiť oveľa viac (vyberať znaky, meniť veľkosť písmen, deliť text na slová) – tomu sa venuje téma Reťazce.
4Logické hodnoty: bool
Typ bool má iba dve hodnoty: True (pravda) a False (nepravda). Píšu sa s veľkým začiatočným písmenom a bez úvodzoviek. Najčastejšie vznikajú ako výsledok porovnania:
>>> 5 > 3 True >>> 10 == 9 False >>> vek = 16 >>> vek >= 18 False
Logické hodnoty sa používajú v podmienkach (if) a cykloch (while) – rozhodujú, či sa niečo vykoná.
5Zistenie typu: type()
Funkcia type prezradí, akého typu je hodnota:
>>> type(42) <class 'int'> >>> type(3.0) <class 'float'> >>> type("42") <class 'str'> >>> type(True) <class 'bool'> >>> type(2 + 0.5) <class 'float'>
3.0 je float, hoci je jeho hodnota celá – rozhoduje desatinná bodka. "42" je str, lebo je v úvodzovkách.
6Prevod typov
Často potrebujeme hodnotu jedného typu zmeniť na iný. Slúžia na to funkcie s menami typov:
| Funkcia | Čo urobí | Príklad | Výsledok |
|---|---|---|---|
int(x) | prevedie na celé číslo | int("42"), int(3.99) | 42, 3 |
float(x) | prevedie na desatinné číslo | float("2.5"), float(4) | 2.5, 4.0 |
str(x) | prevedie na text | str(16) | "16" |
bool(x) | prevedie na logickú hodnotu | bool(0), bool(7) | False, True |
>>> int("42") + 8 50 >>> int(3.99) 3 >>> round(3.99) 4 >>> float("2.5") * 2 5.0 >>> str(16) + " rokov" '16 rokov' >>> int(" 7 ") 7
Všimni si:
int(3.99)je3–intdesatinnú časť odreže, nezaokrúhľuje. Na zaokrúhlenie slúžiround.intsi poradí s medzerami na okrajoch textu (" 7 "), ale nie s textom, ktorý nie je celé číslo:
>>> int("3.5") ValueError: invalid literal for int() with base 10: '3.5' >>> int("dva") ValueError: invalid literal for int() with base 10: 'dva' >>> int(float("3.5")) 3
Prevod je dôležitý najmä pri vstupe: funkcia input vždy vráti text, aj keď niekto napíše číslo. Preto sa číselný vstup číta ako int(input()) – podrobne v téme Vstup a výstup.
6.1Text a číslo v jednom výpise
Text s číslom sa cez + spojiť nedá (TypeError). Máš tri možnosti:
Výstup:
Mám 16 rokov.
Mám 16 rokov.
Mám 16 rokov.Tretí spôsob, f-reťazec, je najpohodlnejší: pred úvodzovky napíšeš f a do zložených zátvoriek {} vložíš premennú alebo výraz.
7Časté chyby
Desatinná čiarka namiesto bodky. Python čiarku chápe ako oddelenie dvoch hodnôt – nevznikne chyba, ale niečo úplne iné, než sme chceli:
Výstup:
(3, 5)
<class 'tuple'>Vznikla takzvaná n-tica dvoch čísel (téma N-tice). Správne je cena = 3.5.
Spájanie textu s číslom:
Výstup (program skončí chybou):
Traceback (most recent call last):
File "program.py", line 2, in <module>
print("Mám " + vek + " rokov.")
~~~~~~~~^~~~
TypeError: can only concatenate str (not "int") to strMeno so zlou veľkosťou písmen:
Výstup (program skončí chybou):
Traceback (most recent call last):
File "program.py", line 2, in <module>
print(meno)
^^^^
NameError: name 'meno' is not defined= namiesto ==. Jedno = je priradenie, dve == sú porovnanie. Vo výrazoch, ktoré majú dať True alebo False, musí byť ==.
8Riešené úlohy
8.1Výmena hodnôt dvoch premenných
Zadanie: V premennej a je 5, v b je 8. Vymeň ich hodnoty.
Riešenie: Zápis a = b a potom b = a nefunguje – po prvom priradení je pôvodná hodnota a stratená. Potrebujeme pomocnú premennú, do ktorej si ju odložíme:
Výstup:
8 5V Pythone sa to dá zapísať aj jedným riadkom a, b = b, a (téma N-tice).
8.2Nákup s DPH
Zadanie: Tovar stojí bez DPH 24,90 €. Vypočítaj DPH 23 % a cenu s DPH, zaokrúhlenú na centy.
Riešenie: DPH je 23 % z ceny, teda cena * 0.23. Cenu s DPH dostaneme sčítaním. Na centy zaokrúhlime funkciou round(…, 2).
Výstup:
DPH: 5.73 €
Cena s DPH: 30.63 €8.3Index telesnej hmotnosti (BMI)
Zadanie: BMI sa počíta ako hmotnosť v kilogramoch delená druhou mocninou výšky v metroch. Vypočítaj BMI pre hmotnosť 62 kg a výšku 172 cm a vypíš ho na jedno desatinné miesto.
Riešenie: Výšku musíme previesť na metre (172 / 100). Druhú mocninu zapíšeme operátorom **.
Výstup:
BMI: 21.0Mocnina má prednosť pred delením, takže hmotnost / vyska_m ** 2 sa vypočíta ako hmotnost / (vyska_m ** 2).
8.4Kruh
Zadanie: Pre polomer 2,5 cm vypočítaj obvod a obsah kruhu. Použi π ≈ 3,14159.
Výstup:
Obvod: 15.71 cm
Obsah: 19.63 cm²Meno PI je napísané veľkými písmenami – tak sa zvyknú označovať hodnoty, ktoré sa v programe nemenia (konštanty). Presnejšie π poskytuje modul math (téma Modulárny program).
Zhrnutie
meno = hodnotauloží hodnotu do premennej; nové priradenie starú hodnotu prepíše.x = x + 1znamená „zvýš x o 1“, nie rovnicu.- Mená: písmená, číslice,
_, nezačínajú číslicou, rozlišujú veľkosť písmen. - Typy:
int(celé),float(desatinné, s bodkou),str(text v úvodzovkách),bool(True/False). /dáva vždyfloat; desatinné čísla pri výpise zaokrúhľuj (round).type(x)zistí typ;int(),float(),str()prevádzajú medzi typmi.int(3.99)je 3 (odreže);int("3.5")je chybaValueError.- Text s číslom spájaj cez
str(), čiarky vprintalebo f-reťazec.
Úlohy na precvičenie
- Ulož do premenných dĺžku a šírku obdĺžnika a vypíš jeho obsah a obvod.
- Vytrasuj (na papieri) program
x = 2,y = x + 3,x = x * y,y = y - xa potom over výsledok spustením. - Prepočítaj 75 minút na hodiny ako desatinné číslo a výsledok zaokrúhli na 2 miesta.
- Zisti typ výsledku výrazov
7 / 7,7 // 7,"7" * 2a3 > 2. - Prepíš výpis
print("Výsledok je " + vysledok)tak, aby fungoval, aj keď jevysledokčíslo.