IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

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

 

Predchádzajúci článok
Riešené úlohy k 5.-6. lekcii Pythona
Všetky články v sekcii
Základná konštrukcia jazyka Python
Preskočiť článok
(neodporúčame)
Podmienky (vetvenie) druhýkrát - Konštrukcia match v Pythone
Článok pre vás napísal gcx11
Avatar
Užívateľské hodnotenie:
20 hlasov
(^_^)
Aktivity