7. diel - Podmienky (vetvenie) v Pythone
V predchádzajúcom cvičení, Riešené úlohy k 5.-6. lekciu Pythona, sme si precvičili získané skúsenosti z predchádzajúcich lekcií.
V tomto Python tutoriále sa budeme venovať podmienkam. Aby sme si mohli niečo naprogramovať, potrebujeme nejako reagovať na rôzne situácie. Môže to byť napríklad hodnota zadaná užívateľom, podľa ktorej budeme chcieť meniť ďalší beh programu. Tomu sa hovorí, že sa program vetví. Na vetvenie používame podmienky. Na vysvetlenie si vytvoríme program na výpočet odmocniny a vylepšíme našu kalkulačku.
Podmienky – if
Podmienky zapisujeme pomocou kľúčového slova if
, za ktorým
nasleduje logický výraz zakončený dvojbodkou (:
). Ak je výraz
v podmienke pravdivý, vykoná sa nasledujúci príkaz. Ak nie, program
nasledujúci príkaz preskočí a pokračuje až pod ním. Vyskúšajme si
to:
if (15 > 5):
print("Pravda")
print("Program tu pokračuje ďalej")
Výstup programu:
Jednoduchá podmínka:
Pravda
Program tu pokračuje ďalej
Pokiaľ podmienka platí (čo v našom príklade áno), vykoná sa príkaz
vypisujúci do konzoly text Pravda
. V oboch prípadoch
program pokračuje ďalej. Súčasťou výrazu samozrejme môže byť aj
premenná:
a = int(input("Zadaj nejaké číslo: "))
if (a > 5):
print("Zadal si číslo väčšie ako 5!")
print("Ďakujem za zadanie")
Relačné operátory
Ukážme si teraz relačné operátory, ktoré môžeme vo výrazoch používať:
Význam | Operátor |
---|---|
Rovnosť | == |
Je ostro väčšia | > |
Je ostro menší | < |
Je väčšia alebo rovná | >= |
Je menšia alebo rovná | <= |
Nerovnosť | != |
Všeobecná negácia | not |
==
preto, aby sa neplietla s bežným
priradením do premennej, ktoré sa robí len jedným =
. Pokiaľ
chceme výraz znegovať, napíšeme pred neho kľúčové slovo
not
.
Blok príkazov
Keď budeme chcieť vykonať viac ako len jeden príkaz, musíme každý príkaz vložiť na samostatný riadok odsadený tabulátorom:
a = int(input("Zadaj nejaké číslo, z ktorého spočítam odmocninu: "))
if (a > 0):
print("Zadal si číslo väčšie ako 0, to znamená, že ho môžem odmocniť!")
odmocnina = a ** (1 / 2)
print(f"Odmocnina z čísla {a} je {odmocnina}")
print("Děkuji za zadání")
V konzole potom vidíme výstup:
Výstup podmínky:
Zadaj nejaké číslo, z ktorého spočítam odmocninu:
144
Zadal si číslo väčšie ako 0, to znamená, že ho môžem odmocniť!
Odmocnina z položky 144 je 12.0
Ďakujem za zadanie
Program načíta od užívateľa číslo, a pokiaľ je väčšie ako
0
, vypočíta z neho druhú odmocninu. Použili sme tu operátor
pre mocniny **
a nastavili zadanú premennú umocnenú exponentom
1/2
, čo je ekvivalent pre získanie druhej odmocniny.
Vetva else
Bolo by dobré, keby nám program vyhuboval v prípade, že zadáme záporné číslo. S doterajšími znalosťami by sme napísali niečo ako:
a = int(input("Zadaj nejaké číslo, z ktorého spočítam odmocninu: "))
if (a >= 0):
print("Zadal si nezáporné číslo, to znamená, že ho môžem odmocniť!")
odmocnina = a ** (1 / 2)
print(f"Odmocnina z čísla {a} je {odmocnina} ")
if (a < 0):
print("Odmocnina zo záporného čísla neexistuje v obore reálnych čísel!")
print("Ďakujem za zadanie")
Kód však môžeme výrazne zjednodušiť pomocou
kľúčového slova else
, ktoré vykoná nasledujúci príkaz alebo
blok príkazov v prípade, že sa podmienka nevykoná:
a = int(input("Zadaj nejaké číslo, z ktorého spočítam odmocninu: "))
if (a >= 0):
print("Zadal si nezáporné číslo, to znamená, že ho môžem odmocniť!")
odmocnina = a ** (1 / 2)
print(f"Odmocnina z čísla {a} je {odmocnina}")
else:
print("Odmocnina zo záporného čísla neexistuje v obore reálnych čísel!")
print("Ďakujem za zadanie")
Kód je teraz oveľa prehľadnejší a nemusíme vymýšľať opačnú
podmienku, čo by v prípade zloženej podmienky mohlo byť niekedy aj veľmi
ťažké. V prípade viacerých príkazov musí byť každý riadok za
kľúčovým slovom else
odsadený tabulátorom.
Kľúčové slovo else
sa využíva aj v prípade, keď
potrebujeme v príkaze manipulovať s premennou z podmienky a nemôžeme sa na
premennú teda pýtať znova. Program si sám pamätá, že sa podmienka
nesplnila, a prejde do vetvy else
. Ukážme si to na príklade.
Prehodenie hodnôt premennej
Majme číslo cislo
, ktoré bude mať hodnotu 0
alebo 1
. Po nás sa bude chcieť, aby sme hodnotu prehodili (ak
bude hodnota 0
, dosadíme namiesto nej 1
, ak bude
1
, dosadíme 0
). Naivne by sme mohli kód napísať
takto:
cislo = 0 # deklarácia premennej s hodnotou 0
if (cislo == 0): # ak je hodnota premennej 0, zmeníme hodnotu na 1
cislo = 1
if (cislo == 1): # ak je hodnota premennej 1, zmeníme hodnotu na 0
cislo = 0
print(cislo)
Kód nefunguje, že? Poďme si prejsť, čo bude program robiť. Na začiatku
máme v cislo
nulu, prvá podmienka sa teda iste splní a dosadí
do cislo
jedničku. No ale razom sa splní aj druhá podmienka. Čo
s tým? Keď podmienky otočíme, budeme mať ten istý problém s jednotkou.
Ako z toho von? Áno, použijeme else
:
cislo = 0 # deklarácia premennej s hodnotou 0
if (cislo == 0): # ak je hodnota premennej 0, zmeníme hodnotu na 1
cislo = 1
else: # ak je hodnota premennej 1, zmeníme hodnotu na 0
cislo = 0
print(cislo)
Program máte samozrejme opäť v prílohe. Skúšajte si vytvárať podobné situácie, znalosti už k tomu máte:-)
V budúcej lekcii, Podmienky (vetvenie) druhýkrát - Konštrukcia match v Pythone , sa vrátime k podmienkam a ukážeme si ďalšiu
podporovanú syntax a konštrukciu match
.
Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 1025x (2.27 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Python