NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!

Diskuze – Lekce 11 - Cyklus while v Pythonu

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Karel Zaoral
Člen
Avatar
Odpovídá na Roman Mrózek
Karel Zaoral:9.1.2024 10:47

Ahoj Romane,

příkaz vysledek = 0.0 v kódu kalkulačky je zde z několika důvodů:

Inicializace proměnné: Tento příkaz inicializuje proměnnou vysledek s počáteční hodnotou 0.0. Inicializace vysledek na 0.0 zajišťuje, že proměnná má platný typ dat (v tomto případě float) a je připravena k použití v následujících výpočtech. Vzhledem k tomu, že výsledkem operací jako sčítání, odčítání, násobení nebo dělení může být číslo s desetinnými místy, je vhodné, aby proměnná byla typu float. Inicializací na 0.0 (což je float) se zajišťuje, že proměnná má správný datový typ pro všechny možné operace.

Čitelnost kódu: Inicializace proměnných na začátku bloku kódu zlepší čitelnost a usnadní porozumění programu.

Máš pravdu, že vysledek = 0.0 není nezbytně nutný pro funkčnost programu, ale je to dobrá programátorská praxe.

 
Odpovědět
9.1.2024 10:47
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Roman Mrózek
DarkCoder:9.1.2024 13:46

Použití příkazu vysledek = 0.0 v programu není vhodný. Inicializace proměnné hodnotou musí mít pádný důvod. Literál 0.0 evokuje validní hodnotu, která se ale v programu vůbec nepoužívá.

V programu je třeba brát v potaz 2 stavy:

  1. Správná volba operace
  2. Úspěšná či neúspěšná kalkulace

Pokud bude volba operace korektní, přistupuje se k úspěšnosti kalkulace. V opačném případě se vypíše sdělení o nesprávné volbě operace. S proměnnou výsledek vůbec nepracuji. Mohu ji však využít při testu výpisu výsledku, jak později ukážu. Pokud bude kalkulace úspěšná (nebudeme dělit nulou), pak se vypíše výsledek. Zde je třeba brát na vědomí, že typ proměnné vysledek se nastaví na typ výsledku výrazu operace. Obsah proměnné bude validní a výsledek tak budu vypisovat. Pokud ale kalkulace nebude úspěšná, vypíše se sdělení o tom že nelze dělit nulou a výpis výsledku se přeskočí. Opět zde mohu ale využít obsahu proměnné pro test zda vypsat výsledek či nikoli.

Mnohem lepší, než vysledek = 0.0 je lepší použít vysledek = None. None indikuje, že vysledek operace je neznámý. Pokud kalkulace bude validní, proměnná se přepíše a proměnnou tak můžeme otestovat na validní hodnotu pro výpis výsledku. Platnost operace lze jednoduše zavést do příkazu match jako defaultní hodnotu. Pokud dojde k dělení nulou, vylsedek bude stále neznámý a tento stav nám pomůže k tomu zda vypsat nebo nevypsat výsledek.

Pokud se podíváš na příklad v článku a budeš provádět operaci dělení a budeš dělit nulou, pak proměnná vysledek, která byla inicializována na 0.0, tedy na nějakou platnou float hodnotu je nyní přepsána řetězcem a její typ se nyní mění naprosto v nesouladu s koncepcí stanoveného typu proměnné.

Použití None je zde ideální, ať už pro informaci, že výsledek ještě není definován, nebo je chybný a zároveň pro test zda vypisovat výsledek či nikoli.

Zde pak je celý program:

print("Vítejte v kalkulačce")
pokracovat = "ano"

while pokracovat == "ano":
    a = float(input("Zadejte první číslo:"))
    b = float(input("Zadejte druhé číslo:"))
    print("Zvolte si operaci:")
    print("1 - sčítání")
    print("2 - odčítání")
    print("3 - násobení")
    print("4 - dělení")
    volba = int(input())
    vysledek = None

    match volba:
        case 1:
            vysledek = a + b
        case 2:
            vysledek = a - b
        case 3:
            vysledek = a * b
        case 4:
            if b != 0:
                vysledek = a / b
            else:
                print("Nulou nelze dělit!")
        case _:
            print("Neplatná volba!")

    if vysledek is not None:
        print(f"Výsledek: {vysledek}")

    pokracovat = input("Přejete si zadat další příklad? [ano/ne]: ")

print("Děkuji za použití kalkulačky, aplikaci ukončíte libovolnou klávesou.")

Když v programu dojde chybné volbě nebo chybnému výpočtu, proměnná vysledek stále zůstane None a výsledek se tak vůbec vypisovat nebude. Všechny potřebné chybové hlášky se vypisují na svých místech bez nějakých duplicit a složitostí.

Odpovědět
9.1.2024 13:46
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Lenka Chalupová:26.1.2024 10:07

Každopádně by bylo fajn, pokud se něco použije v kodu příkladu, to nejdříve vysvětlit proč to tam vůbec dávám. Mě to tedy taky zmátlo. Děkuji

 
Odpovědět
26.1.2024 10:07
Avatar
Tomáš Králík:23.7.2024 21:32

V lekci je hned na začátku poprvé ukázáno
i += 1
Že to je zkrácený zápis i = i + 1 je ale vysvětleno až v další lekci... vysvětlení by se tedy hodilo uvést již zde.

 
Odpovědět
23.7.2024 21:32
Avatar
Karel Půček:19.9.2024 16:31

Trochu jsem čekal něco víc k těm podmínkám ukončení True, False či i něco jiného.

 
Odpovědět
19.9.2024 16:31
Avatar
Marcel Urban
Člen
Avatar
Marcel Urban:8. února 17:33

-------------------------------- jsem v cudu ---------------------------------

 
Odpovědět
8. února 17:33
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 16.