Kromě cyklu for
máme ještě druhý typ cyklu uvozený příkazem while
(angl. dokud).
Na rozdíl od for
, kde předem známe počet opakování,
se while používá, když cyklus závisí na nějaké podmínce.
Tělo cyklu se opakuje, dokud je podmínka splněna. Například:
odpoved = input('Řekni Ááá! ')
while odpoved != 'Ááá':
print('Špatně, zkus to znovu')
odpoved = input('Řekni Ááá! ')
Ale pozor! Je velice jednoduché napsat cyklus, jehož podmínka bude splněna vždycky. Takový cyklus se bude opakovat donekonečna.
from random import randrange
while True:
print('Číslo je', randrange(10000))
print('(Počkej, než se počítač unaví...)')
Program se dá přerušit zmáčknutím Ctrl+C.
Tahle klávesová zkratka vyvolá v programu chybu a program se – jako po každé chybě – ukončí.
A nakonec, existuje příkaz break
, který z cyklu „vyskočí“:
začnou se hned vykonávat příkazy za cyklem.
while True:
odpoved = input('Řekni Ááá! ')
if odpoved == 'Ááá':
print('Bééé')
break
print('Špatně, zkus to znovu')
print('Hotovo, ani to nebolelo.')
Příkaz break
se dá použít jenom v cyklu (while
nebo for
)
a pokud máme víc cyklů zanořených v sobě, vyskočí jen z toho vnitřního.
for i in range(10): # Vnější cyklus
for j in range(10): # Vnitřní cyklus
print(j * i, end=' ')
if i <= j:
break
print()
{ "data": { "sessionMaterial": { "id": "session-material:2019/brno-jaro-2019-pondeli:cycles:2", "title": "Cyklus While", "html": "\n \n \n\n <h1>While</h1>\n<p>Kromě cyklu <code>for</code> máme ještě druhý typ cyklu uvozený příkazem <code>while</code>\n(angl. <em>dokud</em>).\nNa rozdíl od <code>for</code>, kde <em>předem známe počet opakování</em>,\nse while používá, když cyklus závisí na nějaké podmínce.\nTělo cyklu se opakuje, dokud je podmínka splněna. Například:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">odpoved</span> <span class=\"o\">=</span> <span class=\"nb\">input</span><span class=\"p\">(</span><span class=\"s1\">'Řekni Ááá! '</span><span class=\"p\">)</span>\n<span class=\"k\">while</span> <span class=\"n\">odpoved</span> <span class=\"o\">!=</span> <span class=\"s1\">'Ááá'</span><span class=\"p\">:</span>\n <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">'Špatně, zkus to znovu'</span><span class=\"p\">)</span>\n <span class=\"n\">odpoved</span> <span class=\"o\">=</span> <span class=\"nb\">input</span><span class=\"p\">(</span><span class=\"s1\">'Řekni Ááá! '</span><span class=\"p\">)</span>\n</pre></div><p>Ale pozor! Je velice jednoduché napsat cyklus,\njehož podmínka bude splněna vždycky.\nTakový cyklus se bude opakovat donekonečna.</p>\n<div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">random</span> <span class=\"kn\">import</span> <span class=\"n\">randrange</span>\n\n<span class=\"k\">while</span> <span class=\"bp\">True</span><span class=\"p\">:</span>\n <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">'Číslo je'</span><span class=\"p\">,</span> <span class=\"n\">randrange</span><span class=\"p\">(</span><span class=\"mi\">10000</span><span class=\"p\">))</span>\n <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">'(Počkej, než se počítač unaví...)'</span><span class=\"p\">)</span>\n</pre></div><p>Program se dá přerušit zmáčknutím\n<kbd>Ctrl</kbd>+<kbd>C</kbd>.</p>\n<div class=\"admonition note\"><p>Tahle klávesová zkratka vyvolá v programu chybu\na program se – jako po každé chybě – ukončí.</p>\n</div><p>A nakonec, existuje příkaz <code>break</code>, který z cyklu „vyskočí“:\nzačnou se hned vykonávat příkazy za cyklem.</p>\n<div class=\"highlight\"><pre><span></span><span class=\"k\">while</span> <span class=\"bp\">True</span><span class=\"p\">:</span>\n <span class=\"n\">odpoved</span> <span class=\"o\">=</span> <span class=\"nb\">input</span><span class=\"p\">(</span><span class=\"s1\">'Řekni Ááá! '</span><span class=\"p\">)</span>\n <span class=\"k\">if</span> <span class=\"n\">odpoved</span> <span class=\"o\">==</span> <span class=\"s1\">'Ááá'</span><span class=\"p\">:</span>\n <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">'Bééé'</span><span class=\"p\">)</span>\n <span class=\"k\">break</span>\n <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">'Špatně, zkus to znovu'</span><span class=\"p\">)</span>\n\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">'Hotovo, ani to nebolelo.'</span><span class=\"p\">)</span>\n</pre></div><p>Příkaz <code>break</code> se dá použít jenom v cyklu (<code>while</code> nebo <code>for</code>)\na pokud máme víc cyklů zanořených v sobě, vyskočí jen z toho vnitřního.</p>\n<div class=\"highlight\"><pre><span></span><span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">10</span><span class=\"p\">):</span> <span class=\"c1\"># Vnější cyklus</span>\n <span class=\"k\">for</span> <span class=\"n\">j</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">10</span><span class=\"p\">):</span> <span class=\"c1\"># Vnitřní cyklus</span>\n <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">j</span> <span class=\"o\">*</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">end</span><span class=\"o\">=</span><span class=\"s1\">' '</span><span class=\"p\">)</span>\n <span class=\"k\">if</span> <span class=\"n\">i</span> <span class=\"o\"><=</span> <span class=\"n\">j</span><span class=\"p\">:</span>\n <span class=\"k\">break</span>\n <span class=\"k\">print</span><span class=\"p\">()</span>\n</pre></div>\n\n\n " } } }