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-podzim-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 "
}
}
}