Geek tričko zdarma Geek tričko zdarma
Tričko zdarma! Stačí před dobitím bodů použít kód TRIKO15. Více informací zde

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

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

For

Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

Cyklus for 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 373x (745 B)
Aplikace je včetně zdrojových kódů v jazyce python

 

 

Aktivity (6)

 

 

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

Avatar
gcx11
Redaktor
Avatar
gcx11:16.1.2018 19:04

Ano, mělo by být.

Ten blok else je volitelný a provede se pouze tehdy, pokud ten for cyklus skončí normálně.

 
Odpovědět 16.1.2018 19:04
Avatar
brevnovak
Člen
Avatar
brevnovak:8.2.2018 18:51

vsiml jsem si, ze se for pouziva i uprostřed vyrazu:

print (any(c.isalnum()  for c in str))

je to tu nekde popsane? a lze takto používat i jiné cykly?

diky moc :)

Editováno 8.2.2018 18:52
 
Odpovědět 8.2.2018 18:51
Avatar
Martin Petrovaj
Překladatel
Avatar
Odpovídá na brevnovak
Martin Petrovaj:8.2.2018 19:39

To, čo je v tvojom príklade sa volá "generátorová notácia" (angl. list comprehension):

http://www.secnetix.de/…ensions.hawk
https://docs.python.org/…uctures.html#…

V skratke povedané, jedná sa o konštrukciu veľmi podobnú tzv. lambda výrazom (anonymným funkciám), ktorá ti dovolí stručne a elegantne vykonať nejakú operáciu s prvkami nejakej štruktúry, napr. poľa. Dajú sa tak upravovať existujúce polia, ale aj vytvárať nové:

pole = [1, 2, 3, 4]


# všeobecný tvar: vyraz for premenna in struktura if podmienka

rovnake_pole = [ i for i in pole ]

dvojnasobne_pole = [ i*2 for i in pole ]

pole_druhych_mocnin_parnych_cisel = [ i**2 for i in pole if i%2 == 0 ]
# áno, je to dlhý názov premennej a podmienka sa dala zapísať aj ako if not i%2
Odpovědět 8.2.2018 19:39
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
Adam Kovář
Člen
Avatar
Adam Kovář:16.3.2018 13:07

Ahoj, nefunguje mi toto cvičení. Pokaždé píše, že tam nejsou žádné samohlásky. Navíc jsem úplně nepochopil, jak Python ví, že znak je první, druhé, třetí, atd.. písmeno ve slově.

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

 
Odpovědět 16.3.2018 13:07
Avatar
Martin Petrovaj
Překladatel
Avatar
Odpovídá na Adam Kovář
Martin Petrovaj:16.3.2018 13:59

Máš tam len preklep v mene premennej :-)

print ("Program zjistí zda dané slovo obsahuje samohlásky.")
slovo = str(input("Zadejte slovo: " ))
samohlasky = False
for znak in slovo:
    if znak in "aáeéěiíoóuúůyý":
        samohlasky = True       # preklep u teba - namiesto premennej "samohlasky" priraďuješ do "samohlásky" s dĺžňom
        break
if samohlasky:
    print(slovo, " obsahuje samohlásky")
else:
    print(slovo, " neobsahuje samohlásky")

input()

No a Pythonovský for môžeš chápať ako foreach v iných jazykoch. Ak iné jazyky nepoznáš (alebo som ti jednoducho nepomohol), tak Python si pred cyklom reťazec "rozmení" na jednotlivé znaky a s každým znakom vykoná príkazy, ktoré napíšeš do tela cyklu.

string1 = "vták"
print(string1 + " je slovo!")

for znak in string1:
    print(f"Teraz cyklus pracuje s písmenom {znak}!")

# for vie pracovať aj s inými iterovateľnými objektami,
# napr. s n-ticami (tuple) či zoznamami (list),
# nie len s reťazcami
print("\nAha! Pozri sa hore!")
string2 = "lietadlo"

for slovo in string1, string2, "Superman":
    print(f"Je to {slovo}!")
Odpovědět 16.3.2018 13:59
if (this.motto == "") { throw new NotImplementedException(); }
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Zdenek Štěpán:29.11.2018 15:57

Je to sice drobnost, ale v řetězci s definovanými souhláskami chybí písmeno "q".

 
Odpovědět 29.11.2018 15:57
Avatar
Jakub Kovar
Člen
Avatar
Jakub Kovar:30.11.2018 11:07

Ahoj, v následujícím příkladu maš chyby.
print ("Program zjistí zda dané slovo obsahuje samohlásky.")
slovo = str(input("Zadejte slovo: " )) # u promenne slovo chybi str
samohlasky = False
for znak in slovo:
if znak in "aáeéěiíoóuúůyý":
samohlasky = True
break #break je spatne umisteny.
if samohlasky:
print(slovo, " obsahuje samohlásky")
else:
print(slovo, " neobsahuje samohlásky")

Moje nevycvicene oko melo docela problem to odhalit. Oprav to, prosim.
Diky Jakub

 
Odpovědět 30.11.2018 11:07
Avatar
gcx11
Redaktor
Avatar
Odpovídá na Jakub Kovar
gcx11:1.12.2018 0:18

K první výtce, funkce input vrací string, takže přetypovávání na string je zbytečné. K druhé výtce, díky za upozornění, pošlu článek na opravu.

 
Odpovědět 1.12.2018 0:18
Avatar
Michael Smutný:7. května 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. května 9:42
Avatar
Ondra Hájek
Člen
Avatar
Odpovídá na Michael Smutný
Ondra Hájek:12. srpna 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. srpna 11:59
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 79. Zobrazit vše