← Zpět na hodinu

4. hodina – Cyklus while

Cyklus while, příkazy break a continue, srovnání cyklů a opakování.

Výklad a cvičení

Výklad si můžeš přečíst přímo na webu. Příklady procházej po pořadí a kód si zkoušej ve VS Code.

Zpět na přehled materiálů

Cyklus while

Procházej příklady postupně, pak si vyzkoušej cvičení. Kód z bloků si můžeš zkopírovat do Python souboru ve VS Code a spustit. Příklady na jedné stránce na sebe mohou navazovat.

Zpět na přehled hodiny

Proč cyklus while

Spusť soubor a vyzkoušej ho víckrát s různými odpověďmi. Když budeš chtít program zastavit dřív, klikni dole do panelu Terminál a zmáčkni Ctrl+C. Program jde taky zabít ikonou koše vpravo v tom panelu.

Cyklus for použijeme, když předem víme, kolikrát se má něco zopakovat – projdeme range nebo písmena ve slově. Někdy to ale předem nevíme. Chceme opakovat „dokud něco platí". Od toho je cyklus while.

Ptáme se na heslo tak dlouho, dokud není správné.

heslo = input("Zadej heslo: ")
while heslo != "pyladies":
    print("Špatně, zkus to znovu.")
    heslo = input("Zadej heslo: ")
print("Vítej!")

Na heslo se ptáme dvakrát – jednou před cyklem, jednou uvnitř. Není to překlep. Před cyklem se musíme zeptat proto, aby podmínka měla co porovnávat: kontroluje se dřív, než tělo cyklu poprvé proběhne. Uvnitř proto, aby se odpověď před další kontrolou změnila. Bez toho by heslo zůstalo pořád stejné, podmínka by pořád platila a cyklus by běžel donekonečna. V tomto zápisu tedy potřebujeme vstup před cyklem i uvnitř něj. V příkladu Nekonečný cyklus uvidíš jiný zápis, který se ptá jen na jednom místě.

Kolikrát se cyklus zopakoval? To dopředu nevíme – záleží na tom, kdy heslo trefíš. Napoprvé, napotřetí, nebo až po deseti pokusech. Pro takový úkol se hodí while: k opakování mu stačí podmínka.

Takhle se cyklus while čte:

while heslo != "pyladies":
    ...odsazené řádky...

(Celý cyklus krok za krokem ukazuje obrázek cyklus_while.png.)

Cyklus while – názorné vysvětlení


Zpět na téma: Cyklus while · Další: Když se proměnná mění výpočtem

Zdrojový Python soubor

Když se proměnná mění výpočtem

Spusť soubor a sleduj, co se vypíše.

V prvním souboru se proměnná z podmínky měnila tím, že jsme se znovu zeptali uživatele. Můžeme si ji taky spočítat. Cyklus pak běží, dokud výpočet nedojde tam, kam chceme.

Máme provaz dlouhý 100 cm. Přestřihneme ho napůl, jednu polovinu zase napůl, a tak dál. Kolikrát musíme střihnout, než bude kus kratší než 1 cm?

delka = 100
strihnuti = 0
while delka > 1:
    delka = delka / 2       # měníme proměnnou z podmínky
    strihnuti = strihnuti + 1
    print("Střihnutí", strihnuti, "– délka:", delka, "cm")
print("Počet střihnutí:", strihnuti)

Proměnné strihnuti se říká počítadlo. Hodí se vždycky, když potřebuješ vědět, kolikrát cyklus proběhl.


Zpět na téma: Cyklus while · Další: Jak cyklus skončí: ukončovací podmínka a break

Zdrojový Python soubor

Jak cyklus skončí: ukončovací podmínka a break

Spusť soubor víckrát – pokaždé to dopadne jinak.

V prvním souboru jsme psali:

while heslo != "pyladies":

Té podmínce se říká ukončovací podmínka. Python ji zkontroluje vždycky před každým průchodem cyklem: platí → tělo cyklu se provede a kontrola se opakuje neplatí → cyklus skončí a program pokračuje pod ním

Tímhle řádkem si přidáme funkci randrange, kterou má Python připravenou. randrange(1, 7) vybere náhodné číslo od 1 do 6 – jako hod kostkou.

from random import randrange

Házíme kostkou tak dlouho, dokud nepadne šestka.

hod = randrange(1, 7)
while hod != 6:
    print("Padlo", hod, "- házíme znovu.")
    hod = randrange(1, 7)     # DŮLEŽITÉ: měníme proměnnou z podmínky
print("Šestka! Můžeš začít.")

Když padne šestka hned napoprvé, tělo cyklu neproběhne ani jednou. Podmínka se totiž kontroluje už před prvním průchodem.

Všimni si posledního řádku v cyklu: kdybychom kostkou znovu nehodili, hod by zůstal pořád stejný a cyklus by nikdy neskončil.

(Tři různé běhy tohohle programu ukazuje obrázek cyklus_while_behy.png.)

Druhý způsob, jak z cyklu ven: break

Někdy chceme cyklus opustit dřív, než podmínka přestane platit. Od toho je příkaz break – okamžitě z cyklu vyskočí.

Zase házíme na šestku, ale po jedničce to vzdáme.

hod = randrange(1, 7)
while hod != 6:
    if hod == 1:
        print("Padla jednička, končíme.")
        break                 # break = okamžitě opusť cyklus
    print("Padlo", hod, "- házíme znovu.")
    hod = randrange(1, 7)
print("Konec hry.")

Tenhle cyklus má tedy dva východy:

  1. padne šestka → podmínka hod != 6 přestane platit

  2. padne jednička → break nás z cyklu vyhodí rovnou

Cyklus while – názorné vysvětlení


Zpět na téma: Cyklus while · Další: Nekonečný cyklus

Zdrojový Python soubor

Nekonečný cyklus

Spusť soubor a odpovídej, dokud tě to bude bavit.

Když se ukončovací podmínka nikdy neporuší, cyklus běží donekonečna – tomu se říká nekonečný cyklus. Program pak „zamrzne" a musíš ho zastavit sama: klikni dole do panelu Terminál a zmáčkni Ctrl+C. Druhá možnost je ikona koše vpravo v tom panelu – ta program rovnou zabije.

Takhle nekonečný cyklus vznikne omylem – NESPOUŠTĚJ to, běželo by to pořád. Zapomněli jsme cislo zvětšovat, takže je pořád 1 a podmínka cislo <= 5 pořád platí:

cislo = 1
while cislo <= 5:
    print(cislo)

Nejčastější chyba u while je přesně tahle: v těle cyklu chybí řádek, který mění proměnnou z podmínky.

Někdy ale nekonečný cyklus chceme schválně – třeba menu, které se opakuje, dokud uživatelka neřekne dost. Napíšeme while True (podmínka platí vždycky) a ven se dostaneme příkazem break, který už známe.

while True:
    odpoved = input("Chceš pokračovat? (ano/ne) ")
    if odpoved == "ne":
        break
    print("Pokračujeme!")
print("Konec.")

Na odpověď se tady ptáme jen na jednom místě. Podmínka while True se nekontroluje proti žádné proměnné, takže input nemusíme psát i před cyklem, jako jsme to dělali v souboru 01.

while True se bez breaku neobejde – je to jediná cesta ven. break funguje stejně i uvnitř cyklu for.


Zpět na téma: Cyklus while · Další: continue – přeskoč zbytek průchodu

Zdrojový Python soubor

continue – přeskoč zbytek průchodu

Spusť soubor a zadej pár čísel, mezi nimi i nějaké záporné.

break z cyklu vyskočí úplně. Příkaz continue ukončí jenom jeden průchod: zbytek těla cyklu se přeskočí a pokračuje se kontrolou podmínky.

Sčítáme zadaná čísla, záporná do součtu nepočítáme.

soucet = 0
while True:
    odpoved = input("Zadej číslo (nebo 'konec'): ")
    if odpoved == "konec":
        break
    cislo = int(odpoved)
    if cislo < 0:
        print("Záporné číslo přeskakujeme.")
        continue          # zpátky nahoru, další řádky se neprovedou
    soucet = soucet + cislo
    print("Zatím máme:", soucet)
print("Součet:", soucet)

Pozor na continue v cyklu s počítadlem. Tenhle cyklus by běžel donekonečna – u trojky se continue vrátí nahoru a řádek, který cislo zvětšuje, se přeskočí (NESPOUŠTĚJ):

cislo = 1
while cislo <= 5:
    if cislo == 3:
        continue
    print(cislo)
    cislo = cislo + 1

Zpět na téma: Cyklus while · Další: Cvičení: Cyklus while

Zdrojový Python soubor

Cvičení: Cyklus while

Každé cvičení má vlastní soubor ve složce lekce04-cyklus-while/01_cyklus_while/cviceni/. Otevři ho ve VS Code, doplň kód pod zadání a soubor spusť (Run). Řešení si rozklikni až po vlastním pokusu – tvoje řešení může vypadat jinak, a to je v pořádku.

Cvičení 1

Soubor: cviceni/01_odpocitavani.py

Odpočítávej cyklem while od 10 do 1 a nakonec vypiš "Start!".

Zobrazit řešeníSkrýt řešení
cislo = 10
while cislo >= 1:
    print(cislo)
    cislo = cislo - 1
print("Start!")

Cvičení 2

Soubor: cviceni/02_zdvojnasobovani.py

Začni s číslem 1 a v cyklu ho pořád zdvojnásobuj. Zastav se, jakmile přesáhne 1000, a vypiš, kolikrát jsi ho zdvojnásobila.

Zobrazit řešeníSkrýt řešení
cislo = 1
kolikrat = 0
while cislo <= 1000:
    cislo = cislo * 2
    kolikrat = kolikrat + 1
print("Číslo:", cislo)
print("Počet zdvojnásobení:", kolikrat)

Cvičení 3

Soubor: cviceni/03_hlavni_mesto.py

Ptej se uživatele "Jaké je hlavní město Česka? " tak dlouho, dokud nenapíše "Praha". Pak vypiš "Správně!".

Zobrazit řešeníSkrýt řešení
odpoved = input("Jaké je hlavní město Česka? ")
while odpoved != "Praha":
    odpoved = input("Jaké je hlavní město Česka? ")
print("Správně!")

Cvičení 4

Soubor: cviceni/04_scitani_do_nuly.py

Uživatel postupně zadává čísla. Sčítej je. Jakmile zadá 0, přestaň se ptát a vypiš celkový součet.

Zobrazit řešeníSkrýt řešení
soucet = 0
cislo = int(input("Zadej číslo (0 = konec): "))
while cislo != 0:
    soucet = soucet + cislo
    cislo = int(input("Zadej číslo (0 = konec): "))
print("Součet je", soucet)

Cvičení 5

Soubor: cviceni/05_while_true_s_break.py

Pořád dokola se ptej "Napiš slovo: " a to slovo vypiš. Když uživatel napíše "konec", ukonči cyklus příkazem break. Použij while True.

Zobrazit řešeníSkrýt řešení
while True:
    slovo = input("Napiš slovo: ")
    if slovo == "konec":
        break
    print(slovo)
print("Konec.")

Cvičení 6

Soubor: cviceni/06_heslo.py

Ptej se na heslo. Když uživatel zadá "pyladies", vypiš "Vítej!" a skonči. Když se splete třikrát, vypiš "Zablokováno." a skonči taky. Z cyklu se v obou případech dostaneš příkazem break.

Zobrazit řešeníSkrýt řešení
pokusy = 0
while True:
    heslo = input("Zadej heslo: ")
    pokusy = pokusy + 1
    if heslo == "pyladies":
        print("Vítej!")
        break
    if pokusy == 3:
        print("Zablokováno.")
        break
    print("Špatně, zkus to znovu.")

Cvičení 7

Soubor: cviceni/07_seznam_jmen.py

Ptej se "Jméno: " a každé jméno vypiš. Když uživatel nic nenapíše a jen zmáčkne Enter, přeskoč výpis příkazem continue. Cyklus ukonči, když uživatel napíše "konec". (Prázdná odpověď z inputu je prázdný text: "")

Zobrazit řešeníSkrýt řešení
while True:
    jmeno = input("Jméno: ")
    if jmeno == "konec":
        break
    if jmeno == "":
        continue
    print(jmeno)
print("Konec.")

Zpět na téma: Cyklus while · Další: Bonusová cvičení: Cyklus while

Zdrojové soubory na GitHubu

Bonusová cvičení: Cyklus while

Bonusy jsou pro rychlíky – když máš hotová cvičení a zbývá čas. Každý bonus má vlastní soubor ve složce lekce04-cyklus-while/01_cyklus_while/cviceni_bonusy/. Řešení si rozklikni až po vlastním pokusu – tvoje řešení může vypadat jinak, a to je v pořádku.

Bonus 1

Soubor: cviceni_bonusy/01_oko_bere.py

Hra "Oko bere":

Zobrazit řešeníSkrýt řešení
from random import randrange
soucet = 0
while soucet < 21:
    print("Máš", soucet, "bodů.")
    odpoved = input("Chceš si líznout? (ano/ne) ")
    if odpoved == "ne":
        break
    karta = randrange(2, 11)
    print("Lízla sis", karta)
    soucet = soucet + karta

if soucet == 21:
    print("Přesně 21, vyhráváš!")
elif soucet > 21:
    print("Přetáhla jsi přes 21, prohráváš. Máš", soucet)
else:
    print("Končíš s", soucet, "body.")

Zpět na téma: Cyklus while

Zdrojové soubory na GitHubu

For versus while

Procházej příklady postupně, pak si vyzkoušej cvičení. Kód z bloků si můžeš zkopírovat do Python souboru ve VS Code a spustit. Příklady na jedné stránce na sebe mohou navazovat.

Zpět na přehled hodiny

for vs while – kdy použít který

Spusť soubor a sleduj, co se vypíše.

Oba cykly opakují. Liší se tím, kdy se hodí: for – když počet opakování známe předem (projít range nebo text) while – když počet neznáme a opakujeme, dokud platí nějaká podmínka

Stejný úkol – vypsat čísla 1 až 5 – jde napsat obojím:

Forem: počet opakování známe (pět čísel), for si počítání hlídá sám.

for cislo in range(1, 6):
    print(cislo)

Whilem: totéž, ale počítadlo si musíme hlídat sami.

cislo = 1
while cislo <= 5:
    print(cislo)
    cislo = cislo + 1

Když počet opakování známe, for bývá kratší a přehlednější. Některé úlohy ale forem nenapíšeš a bez while se neobejdeš – třeba: opakuj, dokud uživatel nezadá správné heslo opakuj, dokud hráč nechce skončit


Zpět na téma: For versus while · Další: Cvičení: For versus while

Zdrojový Python soubor

Cvičení: For versus while

Každé cvičení má vlastní soubor ve složce lekce04-cyklus-while/02_for_vs_while/cviceni/. Otevři ho ve VS Code, doplň kód pod zadání a soubor spusť (Run). Řešení si rozklikni až po vlastním pokusu – tvoje řešení může vypadat jinak, a to je v pořádku.

Cvičení 1

Soubor: cviceni/01_jaky_cyklus.py

Ke každému zadání si za pomlčku dopiš for, nebo while, a proč sis ho vybrala. Ptej se sama sebe: vím dopředu, kolikrát se to má zopakovat?

  1. Zatluč do prkna 10 hřebíků.

  2. Buš kladivem do hřebíku, dokud není úplně zatlučený.

  3. Zahřívej vodu, dokud se nezačne vařit.

  4. Házej mincí, dokud nepadne panna.

  5. Házej kostkou, dokud šestka nepadne potřetí.

  6. Zeptej se uživatelky na číslo a tolikrát hoď kostkou.

  7. Hoď kostkou a vypiš, co padlo.

  8. Vypiš sudá čísla od 0 do 100.

  9. Vypiš sudá čísla od 0 do čísla, které zadá uživatelka.

  10. Vypiš každé písmeno slova "Praha".

  11. Přidávej do košíku jablka, dokud košík neváží aspoň 2 kg.

  12. Projdi 30 odpovědí v testu a spočítej, kolik jich je správně.

Zobrazit řešeníSkrýt řešení

Tvoje zdůvodnění může být formulované jinak.

  1. for – hřebíků je deset, počet známe předem.

  2. while – kolik ran bude potřeba, dopředu nevíme.

  3. while – jak dlouho se voda bude vařit, dopředu nevíme.

  4. while – panna může padnout hned, nebo až po deseti hodech.

  5. while – šestky počítáme, ale kolik hodů na tři bude potřeba nevíme.

  6. for – jakmile uživatelka číslo zadá, počet opakování známe.

  7. žádný cyklus – hodíme jednou a vypíšeme, nic se neopakuje.

  8. for – čísla od 0 do 100 jsou daná, range(0, 101, 2).

  9. for – počet je daný zadaným číslem, jen ho neznáme při psaní kódu.

  10. for – procházíme text, počet písmen je daný.

  11. while – kolik jablek se do dvou kilo vejde, dopředu nevíme.

  12. for – odpovědí je třicet.

Cvičení 2

Soubor: cviceni/02_pismena_slova.py

Nejdřív rozhodni for/while a napiš si do komentáře proč, pak úlohu naprogramuj.

Vypiš všechna písmena slova "Python", každé na svůj řádek.

Zobrazit řešeníSkrýt řešení

Počet opakování známe (kolik má slovo písmen) -> for.

for pismeno in "Python":
    print(pismeno)

Cvičení 3

Soubor: cviceni/03_pin.py

Nejdřív rozhodni for/while a napiš si do komentáře proč, pak úlohu naprogramuj.

Ptej se na PIN tak dlouho, dokud uživatel nezadá "1234". Pak vypiš "Odemčeno!".

Zobrazit řešeníSkrýt řešení

Ptej se na PIN tak dlouho, dokud uživatel nezadá "1234". Kolikrát se splete dopředu nevíme -> while.

pin = input("Zadej PIN: ")
while pin != "1234":
    print("Špatný PIN.")
    pin = input("Zadej PIN: ")
print("Odemčeno!")

Cvičení 4

Soubor: cviceni/04_nasobky_tri.py

Nejdřív rozhodni for/while a napiš si do komentáře proč, pak úlohu naprogramuj.

Vypiš prvních deset násobků čísla 3 (3, 6, 9, ... 30).

Zobrazit řešeníSkrýt řešení

Deset opakování, počet známe -> for.

for cislo in range(3, 31, 3):
    print(cislo)

Jde to i bez kroku – vynásobit si to v cyklu sama:

for cislo in range(1, 11):
    print(cislo * 3)

Cvičení 5

Soubor: cviceni/05_cisla_do_zaporneho.py

Nejdřív rozhodni for/while a napiš si do komentáře proč, pak úlohu naprogramuj.

Načítej od uživatele čísla tak dlouho, dokud nezadá záporné číslo. Pak vypiš, kolik čísel stihl zadat.

Zobrazit řešeníSkrýt řešení

Kolik čísel zadá dopředu nevíme -> while.

kolik = 0
cislo = int(input("Zadej číslo: "))
while cislo >= 0:
    kolik = kolik + 1
    cislo = int(input("Zadej číslo: "))
print("Počet zadaných čísel před tím záporným:", kolik)

Cvičení 6

Soubor: cviceni/06_unikajici_voda.py

Nejdřív rozhodni for/while a napiš si do komentáře proč, pak úlohu naprogramuj.

V nádrži je 45 litrů vody a každou minutu z ní uteče 3 litry. Po každé minutě vypiš, kolik vody zbývá, a nakonec vypiš, po kolika minutách je nádrž prázdná.

Zobrazit řešeníSkrýt řešení

V nádrži je 45 litrů, každou minutu uteče 3 litry. Po každé minutě vypiš zbytek, nakonec počet minut. Kolikrát se cyklus zopakuje dopředu nevíme -> while.

voda = 45
minuty = 0
while voda > 0:
    voda = voda - 3
    minuty = minuty + 1
    print("Po", minuty, "minutách zbývá", voda, "litrů.")
print("Nádrž je prázdná po", minuty, "minutách.")

Zpět na téma: For versus while

Zdrojové soubory na GitHubu

Opakování

Procházej příklady postupně, pak si vyzkoušej cvičení. Kód z bloků si můžeš zkopírovat do Python souboru ve VS Code a spustit. Příklady na jedné stránce na sebe mohou navazovat.

Zpět na přehled hodiny

Cvičení: Opakování

Každé cvičení má vlastní soubor ve složce lekce04-cyklus-while/03_opakovani/cviceni/. Otevři ho ve VS Code, doplň kód pod zadání a soubor spusť (Run). Řešení si rozklikni až po vlastním pokusu – tvoje řešení může vypadat jinak, a to je v pořádku.

Cvičení 1

Soubor: cviceni/01_delitelna_tremi_nebo_peti.py

Projdi cyklem for čísla od 1 do 30. Vypiš jen ta, která jsou dělitelná třemi nebo pěti. (Nápověda: cislo % 3 == 0)

Zobrazit řešeníSkrýt řešení
for cislo in range(1, 31):
    if cislo % 3 == 0 or cislo % 5 == 0:
        print(cislo)

Cvičení 2

Soubor: cviceni/02_pocet_pismen_a.py

Uživatel zadá slovo. Spočítej, kolikrát se v něm objeví písmeno "a", a výsledek vypiš.

Zobrazit řešeníSkrýt řešení
slovo = input("Zadej slovo: ")
pocet = 0
for pismeno in slovo:
    if pismeno == "a":
        pocet = pocet + 1
print("Písmeno 'a' je ve slově", pocet, "krát")

Cvičení 3

Soubor: cviceni/03_cisla_do_nuly.py

Uživatel zadává čísla tak dlouho, dokud nezadá 0. Nakonec vypiš jejich součet, kolik jich bylo a jejich průměr zaokrouhlený na jedno desetinné místo. (Nápověda: round(cislo, 1))

Zobrazit řešeníSkrýt řešení
soucet = 0
pocet = 0
cislo = int(input("Zadej číslo (0 = konec): "))
while cislo != 0:
    soucet = soucet + cislo
    pocet = pocet + 1
    cislo = int(input("Zadej číslo (0 = konec): "))

if pocet == 0:
    print("Nezadala jsi žádné číslo.")
else:
    print("Součet:", soucet)
    print("Počet:", pocet)
    print("Průměr:", round(soucet / pocet, 1))

Cvičení 4

Soubor: cviceni/04_namerene_teploty.py

Uživatel zadává naměřené teploty. Po každé se zeptej "Další? (ano/ne) ". Až odpoví "ne", vypiš nejvyšší teplotu.

Zobrazit řešeníSkrýt řešení

První teplotu si rovnou zapamatujeme jako zatím nejvyšší, každou další s ní porovnáme.

nejvyssi = int(input("Zadej teplotu: "))
while True:
    dalsi = input("Další? (ano/ne) ")
    if dalsi == "ne":
        break
    teplota = int(input("Zadej teplotu: "))
    if teplota > nejvyssi:
        nejvyssi = teplota

print("Nejvyšší teplota byla", nejvyssi)

Cvičení 5

Soubor: cviceni/05_hadej_cislo.py

Hra "hádej číslo":

Zobrazit řešeníSkrýt řešení
from random import randrange
hadane_cislo = randrange(1, 21)
pokusy = 0
while True:
    odpoved = int(input("Hádej číslo od 1 do 20: "))
    pokusy = pokusy + 1

    if odpoved == hadane_cislo:
        print("Trefa!")
        break

    if pokusy == 5:
        print("Pět pokusů je pryč. Číslo bylo", hadane_cislo)
        break

    if odpoved > hadane_cislo:
        print("Moc velké.")
    else:
        print("Moc malé.")

Zpět na téma: Opakování · Další: Bonusová cvičení: Opakování

Zdrojové soubory na GitHubu

Bonusová cvičení: Opakování

Bonusy jsou pro rychlíky – když máš hotová cvičení a zbývá čas. Každý bonus má vlastní soubor ve složce lekce04-cyklus-while/03_opakovani/cviceni_bonusy/. Řešení si rozklikni až po vlastním pokusu – tvoje řešení může vypadat jinak, a to je v pořádku.

Bonus 1

Soubor: cviceni_bonusy/01_kamen_nuzky_papir.py

Kámen, nůžky, papír – znáš z bonusu v lekci 2, kde hráli dva lidé. Teď to rozšíříme: hraješ proti počítači a na víc kol.

Zobrazit řešeníSkrýt řešení
from random import randrange
while True:
    tvuj_tah = input("Tvůj tah (kamen/nuzky/papir): ")

    # Počítač umí vylosovat jen číslo, tak si ho přeložíme na tah.
    cislo = randrange(1, 4)
    if cislo == 1:
        pocitac = "kamen"
    elif cislo == 2:
        pocitac = "nuzky"
    else:
        pocitac = "papir"
    print("Počítač hrál:", pocitac)

    # Kdo vyhrál: kámen tupí nůžky, nůžky stříhají papír, papír balí kámen.
    vyhrala_kamenem = tvuj_tah == "kamen" and pocitac == "nuzky"
    vyhrala_nuzkami = tvuj_tah == "nuzky" and pocitac == "papir"
    vyhrala_papirem = tvuj_tah == "papir" and pocitac == "kamen"

    if tvuj_tah == pocitac:
        print("Remíza.")
    elif vyhrala_kamenem or vyhrala_nuzkami or vyhrala_papirem:
        print("Vyhrála jsi!")
    else:
        print("Prohrála jsi.")

    znovu = input("Hrát znovu? (ano/ne) ")
    if znovu == "ne":
        break

print("Díky za hru!")

Bonus 2

Soubor: cviceni_bonusy/02_trojuhelnik_z_hvezdicek.py

Uživatel zadá číslo N. Vypiš z hvězdiček trojúhelník vysoký N – první řádek "*", druhý "**", ... N-tý má N hvězdiček. (Nápověda: text se dá opakovat: "*" * 3 je "***")

Zobrazit řešeníSkrýt řešení
n = int(input("Zadej N: "))
for radek in range(1, n + 1):
    print("*" * radek)

Bonus 3

Soubor: cviceni_bonusy/03_ciferny_soucet.py

Uživatel zadá celé číslo. Sečti jeho číslice a součet vypiš. Například z 253 vyjde 10, protože 2 + 5 + 3 = 10. (Nápověda: cislo % 10 dá poslední číslici, cislo // 10 ji utrhne.) Zkus i záporné číslo. Aby to fungovalo, hodí se abs(cislo) – ta funkce zahodí minus.

Zobrazit řešeníSkrýt řešení

Postupně utrháváme poslední číslici, dokud něco zbývá.

cislo = int(input("Zadej celé číslo: "))
cislo = abs(cislo)                   # u záporného čísla zahodíme minus
soucet = 0
while cislo > 0:
    soucet = soucet + cislo % 10     # poslední číslice
    cislo = cislo // 10              # utrhneme ji
print("Součet číslic je", soucet)

Zpět na téma: Opakování

Zdrojové soubory na GitHubu