Späť na hlavnú stránku

Operátory a výrazy v Pythone

Čo sú operátory a výrazy?

Operátor je symbol, ktorý vykonáva nejakú operáciu s jednou alebo viacerými hodnotami (operandmi). Napríklad znak + je operátor, ktorý vykonáva operáciu sčítania.

Výraz je kombinácia hodnôt, premenných, operátorov a funkcií, ktorá sa vyhodnotí na nejaký výsledok. Napríklad 2 + 3 je výraz, ktorý sa vyhodnotí na hodnotu 5.

1. Aritmetické operátory

Aritmetické operátory sa používajú na vykonávanie základných matematických operácií.

Operátor Názov Príklad Výsledok
+ Sčítanie 5 + 3 8
- Odčítanie 5 - 3 2
* Násobenie 5 * 3 15
/ Delenie 5 / 3 1.6666...
// Celočíselné delenie 5 // 3 1
% Modulo (zvyšok po delení) 5 % 3 2
** Umocnenie 5 ** 3 125
# Príklady aritmetických operátorov
a = 10
b = 3

# Základné operácie
print(a + b)    # Sčítanie: 13
print(a - b)    # Odčítanie: 7
print(a * b)    # Násobenie: 30
print(a / b)    # Delenie: 3.3333...

# Celočíselné delenie (výsledkom je celé číslo, desatinná časť sa zahodí)
print(a // b)   # Celočíselné delenie: 3

# Modulo (zvyšok po delení)
print(a % b)    # Modulo: 1

# Umocnenie
print(a ** b)   # Umocnenie: 1000
            

Priorita aritmetických operácií

Python rešpektuje štandardnú matematickú prioritu operácií:

  1. Zátvorky ()
  2. Umocnenie **
  3. Násobenie *, delenie /, celočíselné delenie //, modulo %
  4. Sčítanie +, odčítanie -
# Príklady priority operácií
vysledok1 = 2 + 3 * 4       # 3 * 4 = 12, potom 2 + 12 = 14
print(vysledok1)            # Výpis: 14

vysledok2 = (2 + 3) * 4     # 2 + 3 = 5, potom 5 * 4 = 20
print(vysledok2)            # Výpis: 20

vysledok3 = 2 ** 3 * 2      # 2 ** 3 = 8, potom 8 * 2 = 16
print(vysledok3)            # Výpis: 16

vysledok4 = 2 * 3 ** 2      # 3 ** 2 = 9, potom 2 * 9 = 18
print(vysledok4)            # Výpis: 18
            

2. Operácie s reťazcami

V Pythone sa pri práci s reťazcami používajú tieto základné operácie:

  1. spájanie reťazcov: retazec1 + retazec2
  2. násobenie reťazca celým číslom: cislo * retazec
# Príklady operácií s reťazcami
vysledok1 = "meno" + "priezvisko"      
print(vysledok1)            # Výpis: menopriezvisko

vysledok2 = "jablko" + " " + "banan"
print(vysledok2)            # Výpis: jablko banan

vysledok3 = 3 * "bu"      
print(vysledok3)            # Výpis: bububu

vysledok4 = ("ka") * 2 + "o"
print(vysledok4)            # Výpis: kakao
            

3. Porovnávacie operátory

Porovnávacie operátory sa používajú na porovnanie dvoch hodnôt. Výsledkom porovnania je logická hodnota True (pravda) alebo False (nepravda).

Operátor Význam Príklad Výsledok
== Rovná sa 5 == 5 True
!= Nerovná sa 5 != 3 True
> Väčší ako 5 > 3 True
< Menší ako 5 < 3 False
>= Väčší alebo rovný 5 >= 5 True
<= Menší alebo rovný 5 <= 3 False
# Príklady porovnávacích operátorov
a = 10
b = 3
c = 10

print(a == b)    # Rovná sa: False
print(a != b)    # Nerovná sa: True
print(a > b)     # Väčší ako: True
print(a < b)     # Menší ako: False
print(a >= c)    # Väčší alebo rovný: True
print(a <= c)    # Menší alebo rovný: True

# Porovnanie reťazcov
meno1 = "Adam"
meno2 = "Beata"
print(meno1 == meno2)  # False
print(meno1 < meno2)   # True - porovnáva sa podľa abecedy
            

4. Logické operátory

Logické operátory sa používajú na kombinovanie logických výrazov a pracujú s logickými hodnotami.

Operátor Popis Príklad Výsledok
and Logický súčin - pravda, ak obe podmienky sú pravdivé True and True True
or Logický súčet - pravda, ak aspoň jedna podmienka je pravdivá True or False True
not Logická negácia - prevráti pravdivostnú hodnotu not True False

Pravdivostná tabuľka

Pravdivostná tabuľka ukazuje výsledky logických operácií pre všetky možné kombinácie vstupných hodnôt.

AND

A B A and B
True True True
True False False
False True False
False False False

OR

A B A or B
True True True
True False True
False True True
False False False

NOT

A not A
True False
False True

Príklady použitia logických operátorov

vek = 16
vyska = 175

# Použitie operátora and
je_dospely = vek >= 18
je_vysoky = vyska >= 180
ma_vodicky_preukaz = je_dospely and je_vysoky
print("Má vodičský preukaz:", ma_vodicky_preukaz)  # False, pretože obe podmienky nie sú splnené

# Použitie operátora or
ma_zlavneny_listok = vek < 18 or vek >= 65
print("Má zľavnený lístok:", ma_zlavneny_listok)  # True, pretože aspoň jedna podmienka je splnená

# Použitie operátora not
nie_je_dospely = not je_dospely
print("Nie je dospelý:", nie_je_dospely)  # True

# Kombinovanie logických operátorov
vysledok = (vek > 15 and vyska > 160) or vek >= 18
print("Výsledok kombinovanej podmienky:", vysledok)  # True
            

Vstup od užívateľa

Doteraz sme do premenných vkladali údaje my - ako programátory. V praxi však vytvárame programy pre užívateľov (niekoho cudzieho, kto program nepísal). Preto bude užitočné zistiť údaje od neho, a na základe jeho údajov potom program niečo urobí.

Na načítanie hodnoty od užívateľa slúži príkaz input(). To čo užívateľ po výzve zapíše je vždy reťazec (typ str). Ak by sa aj jednalo o číselný údaj, ak s ním chceme počítať ako s číslom, budeme ho v programe musieť pretypovať:

meno = input('Napíš mi tvoje meno: ")
vek = int(input("Koľké narodeniny osláviš tento rok? "))
rok = int(input("Aký je teraz rok? "))
narodeny = rok - vek      # obe premenné sú typu int
veta = meno + " sa narodil v roku " + str(narodeny)
print(veta)
print(f'{meno} sa narodil v roku {narodeny}') # výpis pomocou formátovania reťazca

Pozn. Ako ste videli v predzádzajúcom príklade, pri výpise cez príkaz print môžeme vypisovať obsah premennej ale i komplikovanejší výstup, vtedy je výhodnejšie použiť tzv. formátovaný reťazec na výstupe, ktorým kombinujeme texty a obsahy premenných. Takže môžeme namiesto príkazu print("Priemer známok:",zn1,zn2,zn3,"je:",priemer,".") použiť zápis: print(f'Priemer známok: {zn1}, {zn2}, {zn3} je {priemer}.'), kde priemer, zn1, zn2 a zn3 sú premenné obsahujúce čísla.

Náhodne generovaná hodnota

Niekedy vstup nechceme od užívateľa, ale chceme použiť nejakú náhodnú hodnotu. Na jej použitie použijeme príkazy z knižnice random.

Vygenerovanie jednej náhodnej hodnoty z intervalu <a;b> slúži príkaz random.randint(a,b). Ak chceme, vybrať náhodnú hodnotu z nejakej množiny, urobíme to príkazom random.choice((hodnota1, hodnota2, hodnota3,...hodnotaN))), kde miesto hodnotyX zadáme konkrétne hodnoty, z ktorýh chceme losovať.

import random      # importovanie knižnice na prácu s náhodnosťou
meno = random.choice(("Adam","Karol","Emil","Peter"))
vek = random.randint(6,18)
rok = random.randint(2020,2026)
print(f'{meno} sa narodil v roku {rok-vek}')

Pozn. V príkaze random.choice(parameter) musí byť parameter typu n-tica, t.j. v zátvorke uvedených, a čiarkou oddelených niekoľko hodnôt. Preto, ak priamo vymenúvate hodnoty, nezabudnite zapísať do príkazu dvojicu zátvoriek.

Príklady

Konverzia teploty zo °F na °C od užívateľa:

# Vzorec: °C = (°F - 32) × 5/9

# Vstupná hodnota zistená od užívateľa
tF = int(input("Zadaj mi teplotu v °F: "))

# Konverzia
tC = (tF - 32 ) * 5/9

# Výstup
print(f'{tF} °F je {tC} °C')

Výstup:

... °F je ... °C

Úlohy na vlastnú prácu

Úloha 1: Je vyznamenaný?

Napíšte program, ktorý od užívateľa načíta 4 známky (alebo ich náhodne vygeneruje): z predmetu matematika, informatika, fyzika a chémia. Program má z nich vypočítať priemernú známku (zaokrúhlenú na 1 desatinné miesto) a vypísať, či je žiak vyznamenaný, t.j. napíše True ak je priemer jeho známok menší alebo rovný 1.5, v opačnom prípade vypíše False.

Očakávaný výstup:

Výstup závisí od toho, aké známky užívateľ zadá, napríklad:

matematika = 1
informatika = 1
fyzika = 2
chémia = 2
Priemer z 1,1,2,2 je: 1.5
Je vyznamenaný: True

alebo pri inom vstupe:

matematika = 2
informatika = 1
fyzika = 2
chémia = 2
Priemer z 2,1,2,2 je: 1.8
Je vyznamenaný: False

Pomôcka:
# Kontrola, či je priemer lepší ako 1.5
je_vyznamenaný = (priemer <= 1.5)
print(f"Je vyznamenaný: {je_vyznamenaný}")

Príklad 2: Jednoduchý ChatBot

Napíšte program podobný Luvikovi (konverzačný ChatBot), ktorý sa užívateľa spýta na jeho meno, potom ho pozdraví s oslovením (Ahoj ...!). Následne od neho zistí, jeho obľúbenú farbu, na čo mu Chatbot odpovie (No ... je pekná farba, aj mne sa páči.). Potom sa ho spýta na počet súrodencov a Chatbot mu odpovie vetou, kde skonštatuje, koľko detí je v rodine (Takže ste dokopy ..., to musí byť u vás veselo.) Nakoniec konverzáciu ukončí (Dobre sme si pokecali, ďakujem.)

Očakávaný výstup:

Ako sa voláš?
Janko
Ahoj Janko!
Aká je tvoja obľúbená farba?
modrá
No modrá je pekná farba, aj mne sa páči.
Koľko máš súrodencov?
2
Takže ste dokopy 3, to musí byť u vás veselo.
Dobre sme si pokecali, ďakujem.

Overenie vedomostí

Test

1. Ktorý operátor sa používa na umocňovanie v Pythone?

a) ^
b) **
c) %
d) //

2. Aký je výsledok operácie 10 % 3?

a) 3
b) 1
c) 0
d) 3.33

3. Ktorý operátor sa používa na spájanie reťazcov?

a) &
b) ,
c) |
d) +

4. Ktorý logický operátor reprezentuje 'a zároveň'?

a) or
b) and
c) not
d) xor

5. Aký je výsledok operácie (5 > 3 and 10 <= 10)?

a) True
b) False
c) Error
d) None

6. Ktorý operátor sa používa na celočíselné delenie?

a) /
b) %
c) //
d) \

7. Ktorý operátor sa používa na zistenie nerovnosti?

a) <>
b) /=
c) !=
d) <=>

8. Aký je výsledok operácie 'Ha ' * 3?

a) Ha Ha Ha
b) Ha3
c) HaHaHa
d) Error

9. Akým príkazom vygenerujeme náhodné číslo od 5 do 10?

a) randint(5,10)
b) random.randint(5,10)
c) random.choice(5,6,7,8,9,10)
d) choice('5','6','7','8','9','10')

10. Aký bude výstup nasledujúceho kódu?

x = 5
y = 10
print(not(x < y and y > 15))  
print(x > y or not(y < 15))  
            
a) False True
b) False False
c) True False
d) True True


Späť na hlavnú stránku