První novoroční výprodej PHP týden
80 % bodů zdarma díky akci Black Friday!
Pouze tento týden sleva až 80 % na e-learning týkající se PHP

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

Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem.
Vydávání, hosting a aktualizace umožňují jeho sponzoři.

V minulé lekci, Booleovské hodnoty, logické operátory a větvení v 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, Seznamy v Pythonu, jejich základní funkce a metody, si ukážeme práci s n-ticemi, seznamy a funkce zip() a len().


 

Stáhnout

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

 

 

Aktivity (10)

 

 

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

Avatar
Michael Smutný:7.5.2019 9:42

Ahoj, co znamená to "samohlasky = False"? Proč to tam je? A proč je na 5. řádku zespodu "if samohlasky"? Nejde mi na hlavu, jak mohu nejprve napsat, že samohlasky=False a v zápětí, že samohlasky=True. Díky za odpověď.

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("")

 
Odpovědět
7.5.2019 9:42
Avatar
Ondra Hájek
Člen
Avatar
Odpovídá na Michael Smutný
Ondra Hájek:12.8.2019 11:59

Ahoj Michael Smutný, já to chápu následovně:
"samohlasky = False" znamená, že proměnné s názvem "samohlásky" přiřazuješ booleovskou hodnotu False (nepravda).

if znak in "aáeéěiíoóuúůyý":
samohlasky = True
break toto je podmínka "if" v těle cyklu, která pokud je splněna, tak se
hodnota proměnné "samohlasky" překlopí do hodnoty
True(pravda) a zároveň se cyklus přeruší příkazem "break"

A pak následuje větvení "if - elese" které říká: pokud má proměnná "samohlásky" hodnotu True, vykonej print(slovo, "obsahuje samohlásky.")
jinak vykonej (slovo, "neobsahuje samohlásky.")

 
Odpovědět
12.8.2019 11:59
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
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
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. 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
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 87. Zobrazit vše