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

Python Základní konstrukce Cykly v Pythonu, funkce range() a výraz pass American English version English version

ONEbit hosting 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:

While cyklus v Pythonu

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

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ňprř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á:

Samohlásky a souhlásky ve větě v Pythonu

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:

Funkce range v Pythonu

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

 

 

Článek pro vás napsal gcx11
Avatar
Jak se ti líbí článek?
21 hlasů
(^_^)
Aktivity (2)

 

 

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

Avatar
Dobrý Den
Člen
Avatar
Dobrý Den:29.10.2017 16:54

uz mi to doslo XDDD

 
Odpovědět 29.10.2017 16:54
Avatar
Dobrý Den
Člen
Avatar
Dobrý Den:29.10.2017 16:54

Děkuji

 
Odpovědět  +1 29.10.2017 16:54
Avatar
Philippe Nicolaus:7. ledna 14:05

BREAK sluzi na to, aby sme vyskocili z cyklu (for znak in slovo) a tym padom pokracuje dalej na if samohlasky:

 
Odpovědět 7. ledna 14:05
Avatar
Tomáš Drtílek:7. ledna 22:47

Ono by to fungovalo i bez toho breaku.
Ale ten break to urychlí, cyklus se ukončí hned po první samohlásce.

 
Odpovědět 7. ledna 22:47
Avatar
Martin Turner:16. ledna 7:08

Ahoj,

v článku je v popisu syntaxe cyklu For uveden cyklus a za ním else:

Cyklus for má syntaxi následují:

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

To je správně?

Jinak děkuji za pěkný tutoriál.

 
Odpovědět 16. ledna 7:08
Avatar
gcx11
Redaktor
Avatar
Odpovídá na Martin Turner
gcx11:16. ledna 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. ledna 19:04
Avatar
brevnovak
Člen
Avatar
brevnovak:8. února 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. února 18:52
 
Odpovědět 8. února 18:51
Avatar
Martin Petrovaj
Překladatel
Avatar
Odpovídá na brevnovak
Martin Petrovaj:8. února 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. února 19:39
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
Adam Kovář
Člen
Avatar
Adam Kovář:16. března 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. března 13:07
Avatar
Martin Petrovaj
Překladatel
Avatar
Odpovídá na Adam Kovář
Martin Petrovaj:16. března 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. března 13:59
if (this.motto == "") { throw new NotImplementedException(); }
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 74. Zobrazit vše