Pouze tento týden sleva až 80 % na e-learning týkající se C# .NET
Aktuálně: Postihly zákazy tvou profesi? Poptávka po ajťácích prudce roste, využij slevové akce 30% výuky zdarma!
C# týden

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 515x (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?
30 hlasů
(^_^)
Aktivity (11)

 

 

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

Avatar
Rudolf Kov
Člen
Avatar
Rudolf Kov:9. ledna 19:06

já jsem na těchto stránkách byl již pár let zpátky, to jsem sice neměl zaplacené příklady, ale stránky mi přišly přehledné... Teď už se to o nich moc říct nedá, navíc to je samá reklama...

 
Odpovědět
9. ledna 19:06
Avatar
Jarda Antoš
Člen
Avatar
Jarda Antoš:17. ledna 13:14

Ahoj,

chtel bych se zeptat, proc jsou v prikladu pro "range" hranate zavorky? Me tento zapis nefunguje. Pouzivam python 2.7, je to specialita pro Python 3 ? Diky

>>> for cislo in range <4>:
...     print<cislo>
...
0
1
2
3
 
Odpovědět
17. ledna 13:14
Avatar
Petr Nadvornik:31. ledna 14:54

Ahoj, díky za lekci. Trochu sem si hrál. ;)

#!/usr/bin/env python3

from math import sqrt
print("Vitejte v multicalc.")
print()
print("Nejdrive vyberte kalkulacku.")
nexto = True
while(nexto):
    print("1 - Numericka")
    print("2 - Geometricka")
    print()
    vyber = int(input("Kalkulacka:" ))
    if vyber == 2:
        print("Vybrali jste kalkulacku pro vypocet geometrickych tvaru.")
        print()
        print("Zadejte cislo volby: ")
        print("1 - Kruh - z polomeru vypocita obvod, prumer a plochu.")
        print("2 - Ctverec - ze zadane strany vypocita obvod, plochu a uhlopricku.")
        print("3 - Obdelnik - ze zadanych stran vypocita obvod, plochu a uhlopricku.")
        print()
        oper2 = int(input("volba c.: "))
        if oper2 == 1:
            print()
            r = float(input("Zadej polomer kruhu (cm): "))
            print("Obvod = ", 2*3.14*r, "cm")
            print("Plocha = ", 3.14*r**2, "cm^2")
            print("Prumer = ", 2 * r, "cm")
        elif oper2 == 2:
            print()
            a = float(input("Zadejte stranu ctverce (cm): "))
            print("Obvod = ", 4 * a, "cm")
            print("Plocha = ", a * a, "cm^2")
            print("Uhlopricka = ", a * 1.4142, "cm")
        elif oper2 == 3:
            print()
            a = float(input("Zadejte stranu 'a' obdelniku (cm): "))
            b = float(input("Zadejte stranu 'b' obdelniku (cm): "))
            print("Obvod = ",2 * (a + b), "cm")
            print("Plocha = ",a * b, "cm")
            print("Uhlopricka = ",(sqrt(a**2 + b**2)),"cm")
        else:
            print("Toto neni platna volba!")
    elif vyber == 1:
        print("Vybrali jste numerickou kalkulacku.")
        print()
        c1 = float(input("Zadejte prvni cislo: "))
        c2 = float(input("Zadjete druhe cislo: "))
        print()
        print("Zadejte cislo operace: ")
        print("1 - Scitani")
        print("2 - Odcitani")
        print("3 - Nasobeni")
        print("4 - Deleni")
        print("5 - Umocnovani")
        oper1 = int(input("operace c.: "))
        if oper1 == 1:
            print("Soucet:", c1 + c2)
        elif oper1 == 2:
            print("Rozdil:", c1 - c2)
        elif oper1 == 3:
            print("Soucin:", c1 * c2)
        elif oper1 == 4:
            print("Podil:", c1 / c2)
        elif oper1 == 5:
            print(c1, "na", c2, "je:", c1 ** c2)
        else:
            print("Toto neni platna volba!")
    else:
            print("Toto neni platna volba!")
    none = True
    while(none):
        odp = input("\nDalsi priklad? y / n: ")
        print()
        if (odp == "y" or odp == "Y"):
            none = False
        elif (odp == "n" or odp == "N"):
            none = False
            nexto = False
        else:
            pass
input("\nDekuji za pouziti multicalc.\nAplikaci ukoncite libovolnou klavesou. ")
 
Odpovědět
31. ledna 14:54
Avatar
Vakos
Redaktor
Avatar
Odpovídá na Jarda Antoš
Vakos:31. ledna 15:16

Ahoj, to je chyba. Místo <, > se používá (, ).

Pokud nemáš důvod používat starší verzi python, tak používej novou verzi. Buď verzi 3.8 nebo už 3.9.

Odpovědět
31. ledna 15:16
"Jediný způsob, jak dělat skvělou práci, je milovat to, co děláte. Pokud jste to ještě nenašli, hledejte dál. Ne...
Avatar
Vakos
Redaktor
Avatar
Odpovídá na Petr Nadvornik
Vakos:31. ledna 15:19

Zkus si třeba upravit kód tak, aby to podporovalo i slovní zadání, tedy například obvod, obsah atd.

Odpovědět
31. ledna 15:19
"Jediný způsob, jak dělat skvělou práci, je milovat to, co děláte. Pokud jste to ještě nenašli, hledejte dál. Ne...
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Odpovídá na Vakos
Petr Nadvornik:31. ledna 16:16

Ahoj, děkuji za tip. Mám v plánu si s tím trochu hrát, přidat další tvary (trojúhelník, koule, atd., to je už trochu složitější.). A přidat jak navrhuješ, aby po zadání čehokoliv se vypočítal zbytek. Uvidím jak to půjde. :-)

 
Odpovědět
31. ledna 16:16
Avatar
Vakos
Redaktor
Avatar
Odpovídá na Petr Nadvornik
Vakos:31. ledna 16:42

Další tvary se budou lišit hlavně v jednotlivých vzorcích. Možná zkus jít dál ať se třeba dostaneš k funkcím a celý kód lépe strukturuješ do logických částí, které vždy budeš spouštět, když budeš potřebovat.

Dívu se ti na kód a poslední podmínka by šla upravit do více verzí, aby jsi to měl jednodušší. Jeden ze způsobů může být pomocí zmenšení znaků. Poté pak nemusíš řešit, zda je to písmeno malé či velké.

string = "Takto vYpAdA sTriNg"
print(string.lower())  # Vystup: takto vypada string

Další možnost se pak nabízí pomocí klíčového slova in, zda se vyskytuje v daném listu. K tomu se ale dostaneš až později v python kurzu.

Způsobů jak co zapsat je spoustu. Doporučuji zkoušet, ale nebát se i pokračovat, protože ti to nabídne další možnosti, jak si kód trochu zjednodušit.

Odpovědět
31. ledna 16:42
"Jediný způsob, jak dělat skvělou práci, je milovat to, co děláte. Pokud jste to ještě nenašli, hledejte dál. Ne...
Avatar
Odpovídá na Vakos
Petr Nadvornik:31. ledna 18:26

Pecka, díky za tip, určitě vyzkouším . Ano nejdříve chci pokračovat v kurzu a přidat do kódu návazné vzorce. Prozatím jsem spokojen s kalkulačkou, tak jak je, zbytek v přidám budoucnosti. V životě by mě nenapadlo, že si po letech budu opakovat matematiku. :)

 
Odpovědět
31. ledna 18:26
Avatar
Petr Zipoo Vošický:8. února 12:13

Opět super a přehledné :)

 
Odpovědět
8. února 12:13
Avatar
Jan Svoboda
Člen
Avatar
Jan Svoboda:9. února 18:26

Hezké příklady

 
Odpovědět
9. února 18: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 108. Zobrazit vše