Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

Diskusia – 11. diel - Cyklus while v Pythone

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Posledné komentáre sú na spodnej časti poslednej stránky.
Avatar
Karel Zaoral
Člen
Avatar
Odpovedá 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.

Avatar
DarkCoder
Člen
Avatar
Odpovedá 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í.

Odpovedať
"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

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.

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.

Avatar
Marcel Urban
Člen
Avatar
Marcel Urban:8. februára 17:33

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

Avatar
Anton Chudjak:21. mája 18:12

dosť komplikovane vysvetlené, na začiatok by som použil jednoduchsie príklady

Avatar
Tomas Ristvej:19. augusta 20:43

Myslim, ze mohlo by toho byt viac opisane v lekcii,

Avatar
Katarína Bodzsár Brudňáková:9. septembra 14:02

v slovencine by mohli byť radsej slovenské nazvi lebo po česky sú aspon české

Avatar
Petr Svárovský:21. októbra 14:40

není to zábava

Posledné komentáre sú na spodnej časti poslednej stránky.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 10 správy z 20.