4. díl - Cykly v Pythonu, funkce range() a výraz pass

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

V minulém díle jsme si ukázali větvení, booleovské hodnoty a spoustu dalšího. Dnes si 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. Příště si ukážeme práci s n-ticemi, seznamy a funkce zip() a len().


 

Stáhnout

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

 

  Aktivity (1)

Článek pro vás napsal gcx11
Avatar
(^_^)

Jak se ti líbí článek?
Celkem (6 hlasů) :
55555


 


Miniatura
Předchozí článek
Cvičení ke 3. lekci Pythonu
Miniatura
Všechny články v sekci
Základní konstrukce jazyka Python
Miniatura
Následující článek
Cvičení k 4. lekci Pythonu

 

 

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

Avatar
Milan Šmídl:

Zdravim chlapy, Dokaze mi nekdo rict, proc mi tento kod nefunguje? Nechci to porovnavat s originalem, prvne to zkusim takto..
Predem dekuji..mejte se

print("mildova kalkulacka")
cykly = True
while cykly:
    x = int(input("zadej X:"))
    y = int(input("zadej Y:"))
    součet = x+y
    součin = x*y
    print("zadej 1 pro soucet a 2 prosoucin")
    vyber = int(input("vzber cislo operace"))
    if vyber==1:
        print(součet)
    if vyber==2:
        print(součin)
    else:
        print("cos to zadal ty ...!")
    odpoved = input("\Chces pokracovat pokracovat? y / n: ")
    if odpoved==y:
       cykly = True
    elif odpoved==n:
       cykly = False
       pass
 
Odpovědět 26.11.2015 21:42
Avatar
Odpovídá na Milan Šmídl
Michal Šmahel (ceskyDJ):

Jakou chybu to hází??
Proměnné si zakládej až v podmínce, při větším kódu je to matoucí a snižuje to výkon. V tomto případě to stačí jen vypsat (1). Jedna podmínka je špatně, máš tam if místo elif (1). V podmínkách nemáš string (textový řetězec) v uvozovkách - "" (2). Ideální by bylo nepoužívat diakritiku (háčky a čárky) v názvech proměnných. Pokračování nemáš ošetřené (3).
1:

# Získání čísel
x = int(input("zadej X: "))
y = int(input("zadej Y: "))

# Získání operace
print("Zadej 1 pro soucet a 2 prosoucin")
vyber = int(input("Cislo operace: "))

# Provedení operace
if vyber == 1:
    print(x + y)
#Tady musí být elif, jedná se pořád o jednu podmínku
elif vyber == 2:
    print(x * y)
else:
    print("Co jsi to zadal, ty ...!")

2:

if odpoved == "y":
   cykly = True
elif odpoved == "n":
   cykly = False
   pass

3:

# Poprvé musí být na true, aby se otázka provedla
chybna_odpoved = True
while chybna_odpoved:
    # Zjištění hodnoty
    odpoved = input("Chces pokracovat? (y / n): ")

    # Vyhodnocení
    if odpoved == "y":
        cykly = True
        chybna_odpoved = False
    elif odpoved == "n":
        cykly = False
        chybna_odpoved = False
    else:
        chybna_odpoved = True
Odpovědět  +1 26.11.2015 22:19
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Odpovídá na Michal Šmahel (ceskyDJ)
Milan Šmídl:

Díky, kalkulacku uz mam vyresenou..ted resim dalsi zadani a vazne nevim co se nezda..dam dalsi prispevek.)

 
Odpovědět 27.11.2015 15:48
Avatar
Milan Šmídl:

Vazne nevim co je zapsano spatne, uz jsem vyzkousel vsechny kombinace..predem dekuji za jakoukoliv pomoc
Zde je cast kodu..

for x in range(x1,y1):
        for y in range(x2,y2):
            soucet = x+y
            if (soucet >= x1 and
               soucet <= y1) or
               (soucet => x2 and
                soucet <= z2):
 
Odpovědět 27.11.2015 16:01
Avatar
Milan Šmídl:

Pardon je to cviceni z teto lekce...Intervaly jsem zapomel dodat:) hezky den..

 
Odpovědět 27.11.2015 16:05
Avatar
Bambo
Člen
Avatar
Odpovídá na Milan Šmídl
Bambo:

Zdravim v predposlednom riadku mas zle zapisany logicky operator ma to byt

soucet >= x2

a nie

soucet => x2
 
Odpovědět 27.11.2015 16:13
Avatar
Vojtěch Přibáň:

místo příkazu for by se dal jednoduše použít cyklus while:

seznam = ["a", "b", "c", "d"]
for x  in seznam:
    print x
#udela to same jako:
cislo = 0
while True:
    if cislo == len(seznam):
        break
    print seznam[(cislo)]
    cislo += 1*

i tak si člověk může představit funkci příkazu for

Editováno 19. října 23:19
 
Odpovědět 19. října 23:18
Avatar
gcx11
Redaktor
Avatar
Odpovídá na Vojtěch Přibáň
gcx11:

Osobně mi to nepřijde jednodušší. Je to více kódu.

 
Odpovědět 20. října 15:29
Avatar
Odpovídá na gcx11
Vojtěch Přibáň:

když jsem příkaz for viděl poprvé, tak jsem měl trochu problém přijít na to, co vlastně dělá. tato interpretace má za účel pomoct těm, co mají stejný problém. samozřejmě že je to zbytečně dlouhý zápis.

 
Odpovědět 20. října 15:51
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 54. Zobrazit vše