7. diel - Podmienky (vetvenie) v Pythone
V predchádzajúcom cvičení, Riešené úlohy k 5.-6. lekcii 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.
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("True")
print("The program continues here")
Výstup programu:
Simple condition:
True
The program continues here
Pokiaľ podmienka platí (čo v našom príklade áno), vykoná sa príkaz
vypisujúci do konzoly text True
. V oboch prípadoch program
pokračuje ďalej. Súčasťou výrazu samozrejme môže byť aj premenná:
a = int(input("Enter a number: "))
if (a > 5):
print("The number you entered is greater than 5!")
print("Thanks for the input!")
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 |
Rovnosť zapisujeme dvoma ==
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:
number = int(input("Enter some number and I'll calculate a square root: "))
if (number > 0):
print("The number you entered is greater than 0, so I can calculate it!")
root = number ** (1 / 2)
print(f"The square root of {number} is {root}")
print("Thanks for the input!")
V konzole potom vidíme výstup:
Condition output:
Enter some number and I'll calculate a square root:
144
The number you entered is greater than 0, so I can calculate it!
The square root of 144 is 12.0
Thanks for the input!
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:
number = int(input("Enter some number and I'll calculate a square root: "))
if (number >= 0):
print("The number you entered is greater than or equal to 0, so I can calculate it!")
root = number ** (1 / 2)
print(f"The square root of {number} is {root}")
if (number < 0):
print("I can't calculate the square root of a negative number!")
print("Thanks for the input!")
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á:
number = int(input("Enter some number and I'll calculate a square root: "))
if (number >= 0):
print("The number you entered is greater than or equal to 0, so I can calculate it!")
root = number ** (1 / 2)
print(f"The square root of {number} is {root}")
else:
print("I can't calculate the square root of a negative number!")
print("Thanks for the input!")
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
túto 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 number
, 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:
number = 0 # the variable is initialized with a value of 0
if (number == 0): # if the value is 0, we change its value to 1
number = 1
if (number == 1): # if the value is 1, we change its value to 0
number = 0
print(number)
Kód nefunguje, že? Poďme si prejsť, čo bude program robiť. Na začiatku
máme v number
nulu, prvá podmienka sa teda iste splní a dosadí
do number
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
:
number = 0 # the variable is initialized with a value of 0
if (number == 0): # if the value is 0, we change its value to 1
number = 1
else: # if the value is 1, we change its value to 0
number = 0
print(number)
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é 0x (795 B)
Aplikácia je vrátane zdrojových kódov v jazyku Python