Topic notes

Operators

~10 min read6 runnable examples

These notes are written in Slovak. The examples run the same in any language.

You can run every example right here, then edit the code and see what changes. Your code runs only in this browser, in an isolated environment with no access to the internet or your account.

Operátory sú znaky, ktorými zapisujeme výpočty a porovnania: +, *, //, %, ==, and… Táto téma prechádza všetky operátory, ktoré budeš bežne používať, a vysvetľuje, v akom poradí sa vyhodnocujú. Najviac pozornosti venuje operátorom // a %, ktoré sa v úlohách objavujú neustále – pri párnosti, cifrách čísla aj prevodoch času.

Čo sa naučíš

  • počítať s operátormi + - * / // % ** a poznať ich prednosť,
  • používať celočíselné delenie a zvyšok (cifry, párnosť, prevody jednotiek),
  • porovnávať hodnoty a skladať podmienky pomocou and, or, not,
  • skracovať zápis pomocou +=, -= a podobných.

1Aritmetické operátory

OperátorVýznamPríkladVýsledok
+sčítanie7 + 29
-odčítanie7 - 25
*násobenie7 * 214
/delenie (vždy desatinné číslo)7 / 23.5
//celočíselné delenie7 // 23
%zvyšok po delení7 % 21
**mocnina7 ** 249
>>> 7 / 2
3.5
>>> 8 / 2
4.0
>>> 7 // 2
3
>>> 7 % 2
1
>>> 2 ** 10
1024
>>> 9 ** 0.5
3.0

9 ** 0.5 je druhá odmocnina (mocnina na 1/2).

1.1Prednosť operátorov

Ak je vo výraze viac operátorov, Python ich vyhodnocuje v tomto poradí (od najvyššej priority):

  1. zátvorky ( ),
  2. mocnina **,
  3. znamienko mínus pred číslom (-x),
  4. *, /, //, % – zľava doprava,
  5. +, - – zľava doprava,
  6. porovnania (==, <, …),
  7. not, potom and, nakoniec or.
>>> 2 + 3 * 4
14
>>> (2 + 3) * 4
20
>>> 10 - 4 - 3
3
>>> 2 * 3 ** 2
18
>>> -2 ** 2
-4
>>> (-2) ** 2
4

Pozor na -2 ** 2: mocnina má prednosť pred mínusom, preto sa počíta ako -(2 ** 2). Ak poradie nevieš naisto, použi zátvorky – nikdy neuškodia a výraz sa lepšie číta.

2Celočíselné delenie a zvyšok

Predstav si, že 17 jabĺk rozdeľuješ rovnakým dielom medzi 5 detí. Každé dostane 17 // 5 = 3 jablká a 17 % 5 = 2 jablká ostanú. Platí:

17 = 5 · (17 // 5) + 17 % 5, teda 17 = 5 · 3 + 2.

>>> 17 // 5
3
>>> 17 % 5
2
>>> divmod(17, 5)
(3, 2)

Funkcia divmod vráti oba výsledky naraz.

2.1Na čo sa % a // používajú

Párnosť a deliteľnosť. Číslo n je deliteľné číslom d, keď je zvyšok nula: n % d == 0. Párne čísla majú zvyšok 0 po delení dvoma.

>>> 14 % 2 == 0
True
>>> 15 % 2 == 0
False
>>> 36 % 9 == 0
True

Cifry čísla. Posledná cifra je zvyšok po delení 10; číslo bez poslednej cifry je celočíselný podiel 10:

>>> n = 4728
>>> n % 10
8
>>> n // 10
472
>>> n // 10 % 10
2
>>> n // 100 % 10
7
>>> n // 1000
4

Prevody jednotiek. Koľko hodín, minút a sekúnd je 7384 sekúnd?

Python
sekundy = 7384
hodiny = sekundy // 3600
zvysok = sekundy % 3600
minuty = zvysok // 60
sek = zvysok % 60
print(hodiny, "h", minuty, "min", sek, "s")

Výstup:

2 h 3 min 4 s

Cyklické opakovanie. Zvyšok sa „točí dookola“: dni v týždni, hodiny na ciferníku. Ak je dnes streda (deň č. 2, pri pondelku č. 0), o 100 dní bude deň (2 + 100) % 7:

>>> (2 + 100) % 7
4
>>> (22 + 5) % 24
3

O 100 dní bude piatok (deň č. 4) a 5 hodín po 22:00 budú 3:00.

2.2Záporné čísla

Pri záporných číslach Python zaokrúhľuje celočíselný podiel nadol (smerom k mínus nekonečnu) a zvyšok má rovnaké znamienko ako deliteľ:

>>> -7 // 2
-4
>>> -7 % 2
1
>>> 7 // -2
-4

Vzťah a = b · (a // b) + a % b platí stále: -7 = 2 · (-4) + 1. V bežných úlohách s kladnými číslami sa s tým nestretneš, ale je dobré to vedieť.

3Porovnávanie

Porovnanie vráti logickú hodnotu True alebo False.

OperátorVýznam
==rovná sa
!=nerovná sa
<, >menšie, väčšie
<=, >=menšie alebo rovné, väčšie alebo rovné
>>> 5 == 5
True
>>> 5 != 5
False
>>> 3 < 8
True
>>> "a" == "A"
False
>>> x = 7
>>> 1 <= x <= 10
True

Python dovoľuje porovnania reťaziť: 1 <= x <= 10 znamená „x je od 1 do 10“, presne ako v matematike.

3.1Porovnávanie textov

Reťazce sa porovnávajú znak po znaku podľa ich kódov (podobne ako v slovníku). Veľké písmená majú menšie kódy ako malé, takže "Zebra" < "auto":

>>> "auto" < "bicykel"
True
>>> "Zebra" < "auto"
True
>>> "10" < "9"
True

Posledný príklad: ako texty sa porovnáva najprv "1" s "9", preto je "10" „menšie“. Čísla zo vstupu preto vždy preveď na int skôr, než ich porovnáš.

3.2Porovnávanie desatinných čísel

Pre nepresnosť desatinných čísel (téma Premenné a dátové typy) nepoužívaj == na výsledky výpočtov s desatinnými číslami:

>>> 0.1 + 0.2 == 0.3
False
>>> abs((0.1 + 0.2) - 0.3) < 1e-9
True
>>> round(0.1 + 0.2, 10) == 0.3
True

4Logické operátory

Logické operátory spájajú podmienky:

  • a and b – pravda, iba ak platí obe časti,
  • a or b – pravda, ak platí aspoň jedna časť,
  • not a – opak.
aba and ba or bnot a
TrueTrueTrueTrueFalse
TrueFalseFalseTrueFalse
FalseTrueFalseTrueTrue
FalseFalseFalseFalseTrue
>>> vek = 15
>>> vek >= 6 and vek <= 18
True
>>> vek < 6 or vek > 65
False
>>> not vek > 18
True

Poradie: najprv not, potom and, nakoniec or. Výraz a or b and c znamená a or (b and c). Pri zložitejších podmienkach používaj zátvorky.

4.1Skrátené vyhodnocovanie

Python vyhodnocuje and a or zľava a skončí, keď je výsledok jasný. Pri and sa druhá časť nevyhodnotí, ak je prvá nepravdivá. To sa dá využiť na ochranu pred chybou:

>>> x = 0
>>> x != 0 and 10 / x > 2
False

Keďže x != 0 je False, delenie 10 / x sa vôbec nevykoná a nenastane delenie nulou.

4.2Častá chyba: x == 1 or 2

Podmienku „x je 1 alebo 2“ nemožno zapísať ako x == 1 or 2. Python ju vyhodnotí ako (x == 1) or 2 a číslo 2 sa v logickom výraze správa ako pravda:

>>> x = 5
>>> x == 1 or 2
2
>>> x == 1 or x == 2
False
>>> x in (1, 2)
False

Správne je porovnať x s každou hodnotou zvlášť, alebo použiť in (téma N-tice).

5Skrátené priradenie

Zápis x = x + 5 sa dá skrátiť na x += 5. Podobne fungujú aj ostatné operátory:

SkráteneZnamená
x += 3x = x + 3
x -= 3x = x - 3
x *= 3x = x * 3
x /= 3x = x / 3
x //= 3x = x // 3
x %= 3x = x % 3
x **= 3x = x ** 3
Python
skore = 100
skore += 25 # bonus
skore -= 40 # trest
skore *= 2 # dvojnásobok
print(skore)

Výstup:

170

Skrátené priradenie sa najčastejšie používa v cykloch na počítadlá (pocet += 1) a súčty (sucet += x).

6Riešené úlohy

6.1Priestupný rok

Zadanie: Rok je priestupný, ak je deliteľný 4, ale nie 100 – s výnimkou rokov deliteľných 400, ktoré priestupné sú. Načítaj rok a vypíš True alebo False.

Riešenie: Pravidlo prepíšeme priamo do logického výrazu. Rok 2024 je priestupný (deliteľný 4, nie 100), rok 1900 nie (deliteľný 100, nie 400), rok 2000 áno (deliteľný 400).

Python
rok = int(input("Rok: "))
priestupny = (rok % 4 == 0 and rok % 100 != 0) or rok % 400 == 0
print(priestupny)

Výstup:

Rok: 2024
True

Zátvorky tu nie sú nutné (and má prednosť pred or), ale výraz s nimi lepšie čítame.

6.2Ciferný súčet trojciferného čísla

Zadanie: Načítaj trojciferné číslo a vypíš súčet jeho cifier.

Riešenie: Stovky sú n // 100, desiatky n // 10 % 10, jednotky n % 10. Pre ľubovoľne dlhé čísla sa ciferný súčet počíta cyklom (téma Cykly).

Python
n = int(input("Trojciferné číslo: "))
stovky = n // 100
desiatky = n // 10 % 10
jednotky = n % 10
print("Ciferný súčet:", stovky + desiatky + jednotky)

Výstup:

Trojciferné číslo: 472
Ciferný súčet: 13

6.3Vydávanie mincí

Zadanie: Automat vydáva drobné mincami 2 €, 1 €, 50 centov, 20 centov, 10 centov, 5 centov, 2 centy a 1 cent. Pre sumu v centoch vypíš, koľko kusov ktorej mince vydá, ak vydáva čo najväčšie mince.

Riešenie: Celočíselné delenie povie, koľko mincí danej hodnoty sa vojde; zvyšok sa rozmení menšími mincami. Pre prehľadnosť ukážeme prvé štyri mince – ostatné by sa riešili rovnako (s cyklom a zoznamom by bol program kratší).

Python
suma = int(input("Suma v centoch: "))
print("2 €:", suma // 200)
suma = suma % 200
print("1 €:", suma // 100)
suma = suma % 100
print("50 c:", suma // 50)
suma = suma % 50
print("20 c:", suma // 20)
suma = suma % 20
print("zvyšok v centoch:", suma)

Výstup:

Suma v centoch: 387
2 €: 1
1 €: 1
50 c: 1
20 c: 1
zvyšok v centoch: 17

6.4Je bod v obdĺžniku?

Zadanie: Obdĺžnik má ľavý dolný roh v bode [0, 0] a pravý horný v bode [8, 5]. Načítaj súradnice bodu a vypíš, či leží vnútri obdĺžnika alebo na jeho hranici.

Python
x = float(input("x: "))
y = float(input("y: "))
vnutri = 0 <= x <= 8 and 0 <= y <= 5
print(vnutri)

Výstup:

x: 3
y: 6
False

Zhrnutie

  • / dáva desatinné číslo, // celočíselný podiel, % zvyšok, ** mocninu.
  • Prednosť: zátvorky, **, mínus pred číslom, * / // %, + -, porovnania, not, and, or.
  • n % d == 0 – deliteľnosť; n % 10 – posledná cifra; n // 10 – číslo bez poslednej cifry.
  • Porovnania vracajú True/False, dajú sa reťaziť (1 <= x <= 10).
  • and – obe, or – aspoň jedna, not – opak; „x je 1 alebo 2“ je x == 1 or x == 2.
  • x += 1 je skratka pre x = x + 1.

Úlohy na precvičenie

  1. Načítaj počet sekúnd a vypíš ho v tvare H:MM:SS (minúty a sekundy vždy dvojmiestne – pomôže formát :02).
  2. Načítaj celé číslo a vypíš, či je deliteľné 3 aj 5 súčasne.
  3. Načítaj štvorciferné číslo a vypíš ho odzadu (napr. 4728 → 8274) iba pomocou // a %.
  4. Načítaj vek a vypíš True, ak človek platí detské vstupné (do 15 rokov) alebo seniorské (od 62 rokov).
  5. Vypočítaj bez spustenia: 3 + 4 * 2 ** 2 // 3, not 3 > 2 or 1 > 2, -9 // 4. Potom over výsledky v Pythone.

Done reading?

Check what you remember with a few short tasks on the topic.