Slevový týden - Červenec C# týden
30 % bodů zdarma na online výuku díky naší Slevové akci!
Pouze tento týden sleva až 80 % na e-learning týkající se C#

Lekce 4 - Cykly v Pythonu, funkce range() a výraz pass

V předešlém cvičení, Řešené úlohy ke 3. lekci Pythonu, jsme si procvičili nabyté zkušenosti z předchozích lekcí.

V minulé lekci, Řešené úlohy ke 3. lekci Pythonu, jsme si ukázali větvení, booleovské hodnoty a spoustu dalšího. Dnes si v tutoriálu ukážeme jak na cykly v Pythonu, funkci range() a výraz pass.

Jak již slovo cyklus napoví, něco se bude opakovat. Když chceme v programu něco udělat 100x, jistě nebudeme psát pod sebe 100x ten samý kód, ale vložíme ho do cyklu. Máme dva druhy cyklů - cyklus while a cyklus se syntaxí for..in. Samozřejmě si ukážeme praktické příklady.

while

Cyklus while je nejjednodušší cyklus v Pythonu, jeho syntaxe je následující:

while podmínka:
    blok_příkazů
else:
    blok_příkazů

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).

Teď si zkusíme vypsat čísla od jedné do desíti. Otevřete si interaktivní konzoli Pythonu, kód je následující:

cislo = 1
while (cislo <= 10):
    print(cislo)
    cislo = cislo + 1 #zvýšíme číslo o jednu - jinak by cyklus nikdy neskončil

Výsledek:

Konzolová aplikace
1
2
3
4
5
6
7
8
9
10

Zde je příklad vypsání sudých čísel:

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...")
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

Do bloku while můžeme přidat i příkazy break a continue. Příkaz break z cyklu vyskočí, continue v cyklu skočí na začátek bloku příkazů.

for...in

Cyklus for...in má syntaxi následují:

for proměnná in iterovatelný_objekt:
    blok_příkazů
else:
    blok_příkazů

Proměnnou jistě všichni znáte :) Iterovatelný objekt je například řetězec. Dále for podporuje i příkazy continue a break.

Cvičení z minulé lekce si tím pádem můžeme zjednodušit:

print("Program zjistí zda dané slovo obsahuje samohlásky.")
slovo = input("Zadejte slovo: ")
samohlasky = False
for znak in slovo:
    if znak in "aáeéěiíoóuúůyý":
        samohlasky = True
        break
if samohlasky:
    print(slovo, "obsahuje samohlásky.")
else:
    print(slovo, "neobsahuje samohlásky.")
input("")

Můžeme si napsat i program pro zjištění počtu samohlásek a souhlásek ve slově:

print("Program zjistí z čeho se skládá slovo.")
slovo = input("Zadejte slovo: ")
samohlasky = 0
souhlasky = 0
ostatni = 0
cisel = 0
for znak in slovo:
    if znak in "aáeéěiíoóuúůyý":
        samohlasky = samohlasky + 1
    elif znak in "bcčdďfghjklmnňpqrřsštťvwxzž":
        souhlasky = souhlasky + 1
    elif znak in "0123456789":
        cisel = cisel + 1
    else:
        ostatni = ostatni + 1
print(slovo, "má: ")
print("samohlásek", samohlasky)
print("souhlásek", souhlasky)
print("čísel", cisel)
print("ostatních znaků...", ostatni)
input("\nAplikaci ukončíte stisknutím libovolné klávesy...")

Takto aplikace vypadá:

Konzolová aplikace
Program zjistí z čeho se skládá slovo.
Zadejte slovo: abeceda100-
abeceda100- má:
samohlásek 4
souhlásek 3
čísel 3
ostatních znaků... 1

Aplikaci ukončíte stisknutím libovolné klávesy...

range()

Další iterovatelný objekt nám poskytne funkce range(). Ta vrací čísla vygenerovaná funkcí.

Syntaxí je několik:

  • range(n) - vrátí čísla od nuly do n-1
  • range(m, n) - vrátí čísla od m do n-1
  • range(m, n, i) - vrátí čísla od m a každé další i-té číslo do n-1

Příklady:

Konzolová aplikace
>>> for cislo in range <4>:
...     print<cislo>
...
0
1
2
3
>>> for cislo in range <2, 5>:
...     print<cislo>
...
2
3
4
>>> for cislo in range <3, 10, 2>:
...     print<cislo>
...
3
5
7
9
>>>

pass

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á.

Příklad:

print("Dotěrná aplikace")
pokracovat = True
while pokracovat:
    slovo = input("\nNapište Python pro ukončení: ")
    if (slovo == "Python" or slovo == "python"):
        print("\nSlovo zadáno!")
        pokracovat = False
    else:
        pass # nic se nestane
input("\nAplikaci ukončíte stisknutím libovolné klávesy...")

Kalkulačka

Nyní si zkusíme vylepšit naší kalkulačku. Program nám funguje, ale kalkulačka je jen na "jedno" použití. Chceme-li zadat další příklad, musíme program spustit znovu. Proto si nyní kalkulačku mírně vylepšíme jedním cyklem a podmínkou :) Hlavní část kódu kalkulačky bude uzavřena v cyklu, který se bude opakovat dokud uživatel kalkulačku neukončí.

Zde je kód kalkulačky:

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 toto je pro tento díl vše. V příští lekci, Řešené úlohy k 4. lekci Pythonu, si ukážeme práci s n-ticemi, seznamy a funkce zip() a len().

V následujícím cvičení, Řešené úlohy k 4. lekci Pythonu, si procvičíme nabyté zkušenosti z předchozích lekcí.


 

Stáhnout

Staženo 438x (745 B)
Aplikace je včetně zdrojových kódů v jazyce python

 

Předchozí článek
Řešené úlohy ke 3. lekci Pythonu
Všechny články v sekci
Základní konstrukce jazyka Python
Článek pro vás napsal gcx11
Avatar
Jak se ti líbí článek?
27 hlasů
(^_^)
Aktivity (10)

 

 

Komentáře
Zobrazit starší komentáře (79)

Avatar
Michaela Honková:11.11.2019 15:11

V poslednim kodu kalkulacky melo byt misto

elif (odpoved == "n" or odpoved == "n"):

tohle..

elif (odpoved == "n" or odpoved == "N"):
 
Odpovědět
11.11.2019 15:11
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
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
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. ledna 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. ledna 6:23
Avatar
Odpovídá na Filip Šídlo
Erik Šťastný:7. ledna 11:47

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

 
Odpovědět
7. ledna 11:47
Avatar
Odpovídá na Filip Šídlo
Karel Přikryl:20. února 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. února 23:19
Avatar
michal
Redaktor
Avatar
michal:26. března 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. března 13:24
 
Odpovědět
26. března 13:22
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 89. Zobrazit vše