NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Lekce 8 - Podmínky (větvení) 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
cinkim
Člen
Avatar
cinkim:29.11.2019 14:18

Ahoj,
tento kod by šel ale zkrátit příkazem for. Protože znám počet cyklů.

print("Program vypíše všechna sudá čísla.")
maximum = int(input("Zadejte maximální číslo: "))
cislo = 0
while (cislo <= maximum):
if (cislo % 2 == 0): #číslo je sudé
print(cislo)
cislo = cislo + 1
input("\nProgram ukončíte stisknutím libovolné klávesy...")

osobně bych to napsal takto:

print("Program vypíše všechna sudá čísla.")
cislo = int(input("Zadej číslo: "))
for i in range(1, cislo + 1):
if i % 2 == 0:
print(i)
input("Program ukončíte stisknutím libovolné klávesy")

 
Odpovědět
29.11.2019 14:18
Avatar
Jana Herudková:7.12.2019 17:26

Ahoj,

ráda bych se zeptala, zda u kódu ke kalkulačce se lze vyhnout části s cyklem while nezadano. Kód jsem místo toho napsala takto:

print("Kalkulačka\n")
pokracovat = True
while pokracovat:
    prvni_cislo = int(input("Zadejte první číslo: "))
    druhe_cislo = int(input("Zadejte druhé číslo: "))
    print("1 - sčítání")
    print("2 - odčítání")
    print("3 - násobení")
    print("4 - dělení")
    cislo_operace = int(input("Zadejte číslo operace: "))
    if cislo_operace == 1:
        print("Jejich součet je:", prvni_cislo + druhe_cislo)
    elif cislo_operace == 2:
        print("Jejich rozdíl je:", prvni_cislo - druhe_cislo)
    elif cislo_operace == 3:
        print("Jejich součin je:", prvni_cislo * druhe_cislo)
    elif cislo_operace == 4:
        print("Jejich podíl je:", prvni_cislo / druhe_cislo)
    else:
        print("Neplatná volba!")
    odpoved = input("\nPřejete si zadat další příklad? y / n: ")
    if (odpoved == "y" or odpoved == "Y"):
        pokracovat = True
    elif (odpoved == "n" or odpoved == "N"):
        pokracovat = False
    else:
        pass
input("\nStiskněte libovolnou klávesu...")

Na první dobrou mi to funguje, ale nevím, zda tato alternativní cesta nemá mně skrytou závadu, v programování jsem absolutní začátečník. Děkuji za odpověď.

 
Odpovědět
7.12.2019 17:26
Avatar
ChaosMachine
Člen
Avatar
Odpovídá na Jana Herudková
ChaosMachine:8.12.2019 1:53

Inu, skrytá závada tam je,ale není vážná (pro tento kód, pro něco důležitějšího by mohla být velmi vážná). Zatímco na levé straně screenshotu je výstup originálního kódu, na straně pravé je kód váš. Po vstupu chybného znaku "0" (může to být ale cokoli jiného než "y" , "Y" a "n", "N") se originální kód zeptá znovu a tím ošetřuje vstup, neboť nebude pokračovat dokud nedostane "y" , "Y" nebo "n", "N". Váš kód ale bude pokračovat po vstupu jakéhokoli znaku kromě "n" nebo "N".

 
Odpovědět
8.12.2019 1:53
Avatar
Odpovídá na ChaosMachine
Jana Herudková:8.12.2019 9:33

Děkuji za objasnění.

 
Odpovědět
8.12.2019 9:33
Avatar
Placka03
Člen
Avatar
Placka03:21.12.2019 12:49

Nešlo by v tom příkladě u funkce pass prostě to else odstranit, když to nic nedělá?

 
Odpovědět
21.12.2019 12:49
Avatar
Filip Šídlo:7.1.2020 6:23

Myslím si že kalkulačka nedělá co má, ale nechápu proč. Předposlední příkazy else a pass. Nerozumím že se me to stále ptá "jestli si přeju zadat další příklad" když zadám například "5" nebo "e" tak by mě to mělo hodit do else a tím pádem by se nemělo nic stát, ale stále dokola se mě to ptá. Prosím je tu někdo chytřejší?

 
Odpovědět
7.1.2020 6:23
Avatar
Odpovídá na Filip Šídlo
Erik Šťastný:7.1.2020 11:47

Začne se tě to znovu ptát na zadání prvního čísla, ne?

 
Odpovědět
7.1.2020 11:47
Avatar
Odpovídá na Filip Šídlo
Karel Přikryl:20.2.2020 23:19

Ahoj FIlipe, zkusím to vysvětlit jak to chápu já.
Pokud zadáš odpověď "5" nebo "e" tak se stane následující:
první podmínka:
if (odpoved == "y" or odpoved == "Y"): #zde se podmínka nevyhodnotí jako pravdivá a proto přechází k další podmínce
elif (odpoved == "n" or odpoved == "N"): # zde se podmínka rovněž nevyhodnotí jako pravdivá a proto zůstává: nezadáno = True
Následuje else: pass viz konec 4 lekce "Klíčové slovo Pythonu pass se používá v podmínkách (nebo kdekoliv jinde), přičemž znamená, že daná část kódu nic nedělá."
Tedy "nezadáno " je stále True a proto se tě znovu zeptá. viz lekce 4: "Blok while pokračuje v provádění příkazů tak dlouho, dokud platí podmínka. Pokud podmínka neplatí, provede se nepovinný blok else. Blok else se ale neprovede v případě, že se z cyklu vyskočí např. příkazy break (ukážeme si za chvíli) nebo return (ukážeme si v další lekci)."
Ale pozor pokud bys zadal break tak se ukončí pouze cyklus " while nezadano:"
pokud bys chtěl ukončit celý cyklus musel bys ukončit ještě cyklus: "while pokracovat:" ten můžeš ukončit třeba pomocí pomocí "pokracovat = False"
PS: ještě pozor na pořadí mělo by být nějak takto:
else:
pokracovat = False
break

 
Odpovědět
20.2.2020 23:19
Avatar
michal
Tvůrce
Avatar
michal:26.3.2020 13:22

ošetrenie pri zadani zlého znaku,

pokracovat=True

while pokracovat:
    cislo1=float(input("zadaj prve cislo "))
    cislo2=float(input("zadaj druhe cislo "))
    print("Operácie")
    print("1","plus")
    print("2","minus")
    print("3","krat")
    print("4","deleno")
    operacia=int(input("zadaj cislo operácie "))
    if operacia==1:
        print("sucet",cislo1+cislo2)
    elif operacia==2:
        print("minus",cislo1-cislo2)
    elif operacia==3:
        print("krat",cislo1*cislo2)
    elif operacia==4:
        print("deleno",cislo1/cislo2)
    else:
        print("zle cislo")

    test=True
    while test:
        odpoved=input("pokracovat y/n")
        if odpoved=="y":
            test=False
            pokracovat=True
        elif odpoved=="n":
            test=False
            pokracovat=False
        else:
            print("zlý znak")
            test=True
Editováno 26.3.2020 13:24
 
Odpovědět
26.3.2020 13:22
Avatar
Lukáš Otáhal:15.7.2020 14:26

Dobrý den,
Mám problém ze kterého mi jde hlava kolem... Konkrétní příklad s kalkulačkou. Mám svůj psaný kod zde :

print("Kalkulačka\n")
pokracovat = True
while pokracovat:
    prvni_cislo = int(input("Zadejte první číslo: "))
    druhe_cislo = int(input("Zadejte druhé číslo: "))
    print("1 - sčítání")
    print("2 - odčítání")
    print("3 - násobení")
    print("4 - dělení")
    print("5 - umocňování")
    cislo_operace = int(input("Zadejte číslo operace: "))
    if cislo_operace == 1:
        print("Jejich součet je:", prvni_cislo + druhe_cislo)
    elif cislo_operace == 2:
        print("Jejich rozdíl je:", prvni_cislo - druhe_cislo)
    elif cislo_operace == 3:
        print("Jejich součin je:", prvni_cislo * druhe_cislo)
    elif cislo_operace == 4:
        print("Jejich podíl je:", prvni_cislo / druhe_cislo)
    elif cislo_operace == 5:
        print(prvni_cislo, "na", druhe_cislo, "je:", prvni_cislo ** druhe_cislo)
    else:
        print("Neplatná volba!")
    nezadano = True
    while nezadano:
        odpoved = input("\nPřejete si zadat další příklad? y / n: ")
        if (odpoved == "y" or odpoved == "Y"):
            nezadano = False
        elif (odpoved == "n" or odpoved == "N"):
            nezadano == False
            pokracovat == False
        else:
            pass
input("\nStiskněte libovolnou klávesu...")

a z nějakého důvodu mi nebere odpověď n/N na závěr. Když zadám n/N nebo cokoli jiného kromě y/Y tak se mě zeptá znovu.

hlava mi jde kolem z toho že nemůžu nají rozdíl mezi vlastním ( nahoře ) a vaším tady na stránce. Dokonce jsem si váš příklad zkopíroval do IDLE a váš funguje ale můj ne. Nenašel jsem nikde žádný rozdíl nebo chybu. Pokud jsem slepý tak mě prosím opravte :-? ... nebo je možné že se nějak zasekl/zacyklil IDLE? Hlava mi to opravdu nebere :D

 
Odpovědět
15.7.2020 14:26
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 10 zpráv z 158.