Pouze tento týden sleva až 80 % na e-learning týkající se C# .NET
Nauč se s námi víc. Využij 50% zdarma na e-learningové kurzy.
C# week

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

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 následujícím cvičení, Řešené úlohy k 4. lekci Pythonu, si procvičíme nabyté zkušenosti z předchozích lekcí.


 

Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 553x (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?
32 hlasů
(^_^)
Aktivity

 

 

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

Avatar
Ondřej Vajda:3. července 8:25

Ahoj, protože jsem se nudil, udělal jsem v pythonu příběhovku. Ale narazil jsem na problém. Když mám if choice2==1, jako první možnost a uvnitř mám 3 možnosti, tak u některých chci mít GAME OVER a další aby pokračovali, tak jsem tam napsal choice2=0, aby to ty choice další nepsalo, ale píše to další printy, které tam mám. Pokud na to existuje nějaký příkaz nebo nevím, tak budu rád, když mi odpovíte.

if choice2==1:

    if weapon=="kámen":
        print("Tajně ses k němu přiblížil a hodil jsi po něm kámen.")
        print("Bohužel si ho tím jenom naštval a začal na tebe útočit.")
        print("Divočák do tebe útočil tak silně, až to umlátil k smrti.\n")
        print("GAME OVER")
        choice3=0

    elif weapon=="sekera":
        print("Tajně ses k němu přiblížil a hodil jsi po něm sekeru.")
        print("Sekera se do něho zasekla a divočák ze svým tělem spadl na zem a nehýbal se.")
        print("Pomalu jsi se k němu přiblížil a ujistil jses že jsi ho opravdu zabil!")
        print("Potom jsi ho pomalu odtáhl do své jeskyně a měl jsi postaráno o další den a o příští snídani.\n")

    elif weapon=="dřevěný meč":
        print("Tajně ses k němu přiblížil a hodil jsi po něm dřevěný meč.")
        print("Bohužel dřevěné meče nejsou železné, takže ho to trochu škráblo a divočák se naštval a začal na tebe útočit.")
        print("Divočák do tebe útočil tak silně, až tě umlátil k smrti.\n")
        print("GAME OVER")
        choice3=0



if choice2==2:
    print("Jak jsi pokračoval a vzdaloval jses metr od metru od jeskyně, tak jsi zahlédl srnce.")
    print("Tento srnec už byl mrtvý, ale maso bylo čerstvé a proto jsi ho vzal do své jeskyně.")
    print("A měl jsi postaráno o další den a o příští snídani.\n")

print("ODPOLEDNE\n")
print("Opět vyjdeš z jeskyně a půjdeš se projít dál do okolí.")
print("Nakonec konečně najdeš daleko v údolí vesničku, která očividně byla obydlená.")
if choice3==3:
    print("jzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
 
Odpovědět
3. července 8:25
Avatar
Zdeněk Vrbík:9. září 21:44

Opsal jsem si zdrojový kód té Kalkulačky a nefungovalo mně to. Když jsem zadal "y" pro pokračování, neustále se opakovala otázka, jestli si přeju zadat další příklad. Možná jsem ale něco v tom kódu špatně opsal.
Řekněme, že nejsem úplný začátečník, ale vzhledem k tomu, že jsem doposud samouk, začal jsem tady na ITNetwork úplně od začátku. Neřešil bych takový případ jako u té kalkulačky cyklem "while", ale posílám scan se zdrojovým kódem mého řešení, které funguje. (Vyzkoušel jsem to!)
Zajímal by mě názor někoho ze zkušenějších na toto moje řešení.

 
Odpovědět
9. září 21:44
Avatar
Jaroslav Jančár:12. září 11:19

ahoj, myslím že máte chybu v Kalkulačce na vašem 28. řádku
odpoved = input("\nPřejete si zadat další příklad? y / n: ")
napsal jsem:
odpoved = str(input("n\pře­jete si zadat další příklad? y / n: "))
kalkulačka pak funguje

Odpovědět
12. září 11:19
Lepší pozdě, jak později.
Avatar
Odpovídá na Jaroslav Jančár
Jaroslav Jančár:12. září 11:54

... měl jsem chybu v n\ -> \n ;-)
odpoved = str(input("\npře­jete si zadat další příklad? y / n: "))

Odpovědět
12. září 11:54
Lepší pozdě, jak později.
Avatar
Marwin
Člen
Avatar
Marwin:12. září 17:32

Ahoj, měl bych dotaz k výpočtu počtu znaků v rámci slova.
Zkoušel jsem vymyslet, jakým způsobem zobrazit pouze to, zda se jedná o souhlásky, samohlásky atp. Musel bych napsat všechny varianty, které mohou nastat viz přiložená část kódu? Nebo mi něco uniká a je možný to napsat jinak? Děkuji!

print(slovo, 'obsahuje:')
if ((samohlasky > 0) and (souhlasky > 0) and (cisla > 0) and (ostatni > 0)):
    print(samohlasky, 'samohlasek')
    print(souhlasky, 'souhlasek')
    print(cisla, 'cisel')
    print(ostatni, 'ostatnich znaku')
elif ((souhlasky > 0) and (cisla > 0) and (ostatni > 0)):
    print(souhlasky, 'souhlasek')
    print(cisla, 'cisel')
    print(ostatni, 'ostatnich znaku')
elif ((cisla > 0) and (ostatni > 0)):
    print(cisla, 'cisel')
    print(ostatni, 'ostatnich znaku')
else:
    print('slovo neobsahuje zadny znak')
input('\nKonec aplikace')
 
Odpovědět
12. září 17:32
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Alesh
Překladatel
Avatar
Odpovídá na Marwin
Alesh:12. září 21:37

Chápu správně, že to je fragment upraveného kódu z této lekce, kde tedy usiluješ o to, aby se nevypisovalo oznámení počtu dané kategorie znaků (samohlásky, souhlásky, čísla a ostatní), pokud v tom slově daná kategorie znaků není zastoupená?

 
Odpovědět
12. září 21:37
Avatar
Marwin
Člen
Avatar
Odpovídá na Alesh
Marwin:13. září 18:37

Ano je to tak, jde mi vlastně o to, že v případě, že slovo bude obsahovat jen souhlásky, vypíše to jen souhlásky atp.
Jediné, co mě napadá, tak vypsat všechny varianty, ale hádám, že existuje možnost, jak to vyřešit, ale pravděpodobně až v dalších lekcích.

 
Odpovědět
13. září 18:37
Avatar
Alesh
Překladatel
Avatar
Odpovídá na Marwin
Alesh:13. září 20:57

No, to ses nad tím moc nezamyslel. ;-) Jak se dělají podmínky if - elif - else už je podle mě v této fázi kurzu kompletně vysvětleno, vše další je už jen o tom, jak dokážeš přemýšlet v kombinaci se zkušenostmi, které máš. Pokud moc zkušeností nemáš, o to víc musíš zapojit tu hlavu. ;-)
To, co jsi vytvořil, je chybné, odpověz si na otázku, co se vypíše v případě, že slovo obsahuje např. jen souhlásky.
Správné řešení tvého požadavku je, že uděláš jednotlivé if, kde si vždy ověříš jen jednu z těch kategorií a tu pak při splnění podmínky tuto kategorii vypíšeš.

 
Odpovědět
13. září 20:57
Avatar
Michal
Člen
Avatar
Michal:14. září 18:48

Ahoj,
zajímalo by mě, proč je volen z mého pohledu tak komplikovaný přístup při řešení výpisu sudých čísel. Proč další IF a celočíselené dělení 2?

Nevystačil by si člověk s prostým sčítáním a polovičním počtem cyklů? Vím, že je dnes výkon PC takový, že člověka tento výpočet nezdrží, ale z mého pohledu by se měl vždy volit nejméně složitý postup nejen s ohledem na přehlednost, ale i minimalizování zatížení PC. Nebo mi něco uniká?

Co takovéto řešení bez dalšího IF a výkonově náročného dělení?

print("Program vypíše všechna sudá kladná čísla.")
max = int(input("Zadej maximální hodnotu čísla: "))
cislo = 0
while (cislo <= max):
    print(cislo)
    cislo = cislo + 2
else:
    print("Konec programu!")

Díky za reakce

Michal

 
Odpovědět
14. září 18:48
Avatar
Alesh
Překladatel
Avatar
Odpovídá na Michal
Alesh:14. září 20:16

Já bych to bral jako ukázku, prostě máš cyklus a v něm podmínku. Jinak máš samozřejmě pravdu. Taky by to šlo řešit přes for cyklus. Jinak inkrementaci proměnné lze psát taky spořivěji:

# cislo = cislo + 2
cislo += 2
 
Odpovědět
14. září 20:16
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 120. Zobrazit vše