Cykly

Programátoři se neradi opakují. Programování je o automatizaci: nebudeme zdravit každého člověka zvlášť, vezměme seznam padesáti lidí a pozdravíme je všechny najednou!

(No, někteří programátoři asi nejsou moc sociálně nadaní. Ale jinde se ta automatizace fakt hodí!)

Ještě si vzpomínáš na seznamy? Udělej si seznam jmen:

jmena = ['Rachel', 'Monica', 'Phoebe', 'Ola', 'Ty']

Udělejme program, který:

  • Pro každé jméno ze seznamu jmen:
    • pozdraví daným jménem

V Pythonu se takový cyklus – opakování „pro každý prvek seznamu“ – píše pomocí příkazu for:

for jmeno in jmena:
    pozdrav(jmeno)

Celý program bude tedy vypadat takto:

def pozdrav(jmeno):
    print('Vítam tě,', jmeno)

jmena = ['Rachel', 'Monica', 'Phoebe', 'Ola', 'Ty']
for jmeno in jmena:
    pozdrav(jmeno)

A když ho spustíme:

$ python3 python_intro.py
Vitam ťa, Rachel
Vitam ťa, Monica
Vitam ťa, Phoebe
Vitam ťa, Ola
Vitam ťa, Ty

Jak vidíš, vše, co jsi vložila dovnitř příkazu for s odsazením, se zopakuje pro každý prvek seznamu jmena.

Opakuj n-krát

Cyklus for můžeš použít i s jinými hodnotami než se seznamy.

Často se používá s funkcí range(). Když chceš něco 200-krát zopakovat, napiš:

for i in range(200):
     print("Nebudu nikdy házet igelit do táboráku!")

Jak to funguje? for i in range(X) se dá přeložit jako „pro každé číslo od nuly do X“. Funkce range onu posloupnost čísel od nuly do X vytvoří. Do proměnné i Python postupně uloží každé číslo, podle toho po kolikáté cyklem prochází.

for i in range(5):
     print(i)
0
1
2
3
4

Všimni si, že samotné 5 není zahrnuto ve výsledku: range(5) počítá od 0 do 4. Když počítáš od nuly a chceš pět čísel, skončíš u čtyřky.

Shrnutí

A je to. Jsi naprosto skvělý/á! Tohle byla složitá lekce, takže bys na sebe měl/a být hrdý/á. My jsme na tebe velmi hrdí za to, že ses dostal/a tak daleko!

Naučil/a ses:

  • Cyklus je způsob, jak opakovat nějaký postup několikrát po sobě
  • range pomáhá když potřebuješ určitý konkrétní počet opakování.

Můžeš si jít krátce odpočinout – protáhnout se, projít se, zavřít oči – než se pustíme do další kapitoly. :)

🧁

{
  "data": {
    "sessionMaterial": {
      "id": "session-material:2018/snake-brno-codeweek:intro:12",
      "title": "Cykly",
      "html": "\n          \n    \n\n    <h1>Cykly</h1>\n<p>Program&#xE1;to&#x159;i se neradi opakuj&#xED;.\nProgramov&#xE1;n&#xED; je o automatizaci: nebudeme zdravit ka&#x17E;d&#xE9;ho &#x10D;lov&#x11B;ka zvl&#xE1;&#x161;&#x165;,\nvezm&#x11B;me seznam pades&#xE1;ti lid&#xED; a pozdrav&#xED;me je v&#x161;echny najednou!</p>\n<p>(No, n&#x11B;kte&#x159;&#xED; program&#xE1;to&#x159;i asi nejsou moc soci&#xE1;ln&#x11B; nadan&#xED;.\nAle jinde se ta automatizace fakt hod&#xED;!)</p>\n<p>Je&#x161;t&#x11B; si vzpom&#xED;n&#xE1;&#x161; na seznamy?\nUd&#x11B;lej si seznam jmen:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">jmena</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&apos;Rachel&apos;</span><span class=\"p\">,</span> <span class=\"s1\">&apos;Monica&apos;</span><span class=\"p\">,</span> <span class=\"s1\">&apos;Phoebe&apos;</span><span class=\"p\">,</span> <span class=\"s1\">&apos;Ola&apos;</span><span class=\"p\">,</span> <span class=\"s1\">&apos;Ty&apos;</span><span class=\"p\">]</span>\n</pre></div><p>Ud&#x11B;lejme program, kter&#xFD;:</p>\n<ul>\n<li>Pro ka&#x17E;d&#xE9; jm&#xE9;no ze seznamu jmen:<ul>\n<li>pozdrav&#xED; dan&#xFD;m jm&#xE9;nem</li>\n</ul>\n</li>\n</ul>\n<p>V&#xA0;Pythonu se takov&#xFD; <em>cyklus</em> &#x2013; opakov&#xE1;n&#xED; &#x201E;pro ka&#x17E;d&#xFD; prvek seznamu&#x201C; &#x2013; p&#xED;&#x161;e\npomoc&#xED; p&#x159;&#xED;kazu <code>for</code>:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"k\">for</span> <span class=\"n\">jmeno</span> <span class=\"ow\">in</span> <span class=\"n\">jmena</span><span class=\"p\">:</span>\n    <span class=\"n\">pozdrav</span><span class=\"p\">(</span><span class=\"n\">jmeno</span><span class=\"p\">)</span>\n</pre></div><p>Cel&#xFD; program bude tedy vypadat takto:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">pozdrav</span><span class=\"p\">(</span><span class=\"n\">jmeno</span><span class=\"p\">):</span>\n    <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">&apos;V&#xED;tam t&#x11B;,&apos;</span><span class=\"p\">,</span> <span class=\"n\">jmeno</span><span class=\"p\">)</span>\n\n<span class=\"n\">jmena</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&apos;Rachel&apos;</span><span class=\"p\">,</span> <span class=\"s1\">&apos;Monica&apos;</span><span class=\"p\">,</span> <span class=\"s1\">&apos;Phoebe&apos;</span><span class=\"p\">,</span> <span class=\"s1\">&apos;Ola&apos;</span><span class=\"p\">,</span> <span class=\"s1\">&apos;Ty&apos;</span><span class=\"p\">]</span>\n<span class=\"k\">for</span> <span class=\"n\">jmeno</span> <span class=\"ow\">in</span> <span class=\"n\">jmena</span><span class=\"p\">:</span>\n    <span class=\"n\">pozdrav</span><span class=\"p\">(</span><span class=\"n\">jmeno</span><span class=\"p\">)</span>\n</pre></div><p>A kdy&#x17E; ho spust&#xED;me:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">$ </span>python3 python_intro.py\n<span class=\"go\">Vitam &#x165;a, Rachel</span>\n<span class=\"go\">Vitam &#x165;a, Monica</span>\n<span class=\"go\">Vitam &#x165;a, Phoebe</span>\n<span class=\"go\">Vitam &#x165;a, Ola</span>\n<span class=\"go\">Vitam &#x165;a, Ty</span>\n</pre></div><p>Jak vid&#xED;&#x161;, v&#x161;e, co jsi vlo&#x17E;ila dovnit&#x159; p&#x159;&#xED;kazu <code>for</code> s odsazen&#xED;m,\nse zopakuje pro ka&#x17E;d&#xFD; prvek seznamu <code>jmena</code>.</p>\n<h2>Opakuj <var>n</var>-kr&#xE1;t</h2>\n<p>Cyklus <code>for</code> m&#x16F;&#x17E;e&#x161; pou&#x17E;&#xED;t i s jin&#xFD;mi hodnotami ne&#x17E; se seznamy.</p>\n<p>&#x10C;asto se pou&#x17E;&#xED;v&#xE1; s funkc&#xED; <code>range()</code>.\nKdy&#x17E; chce&#x161; n&#x11B;co 200-kr&#xE1;t zopakovat, napi&#x161;:</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\">200</span><span class=\"p\">):</span>\n     <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;Nebudu nikdy h&#xE1;zet igelit do t&#xE1;bor&#xE1;ku!&quot;</span><span class=\"p\">)</span>\n</pre></div><p>Jak to funguje?\n<code>for i in range(X)</code> se d&#xE1; p&#x159;elo&#x17E;it jako &#x201E;pro ka&#x17E;d&#xE9; &#x10D;&#xED;slo\nod nuly do <var>X</var>&#x201C;.\nFunkce <code>range</code> onu posloupnost &#x10D;&#xED;sel od nuly do <var>X</var> vytvo&#x159;&#xED;.\nDo prom&#x11B;nn&#xE9; <code>i</code> Python postupn&#x11B; ulo&#x17E;&#xED; ka&#x17E;d&#xE9; &#x10D;&#xED;slo, podle toho po kolik&#xE1;t&#xE9;\ncyklem proch&#xE1;z&#xED;.</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\">5</span><span class=\"p\">):</span>\n     <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">)</span>\n</pre></div><div class=\"highlight\"><pre><code>0\n1\n2\n3\n4</code></pre></div><p>V&#x161;imni si, &#x17E;e samotn&#xE9; <code>5</code> nen&#xED; zahrnuto ve v&#xFD;sledku:\n<code>range(5)</code> po&#x10D;&#xED;t&#xE1; od 0 do 4.\nKdy&#x17E; po&#x10D;&#xED;t&#xE1;&#x161; od nuly a chce&#x161; p&#x11B;t &#x10D;&#xED;sel, skon&#x10D;&#xED;&#x161; u &#x10D;ty&#x159;ky.</p>\n<h2>Shrnut&#xED;</h2>\n<p>A je to.\n<em>Jsi naprosto skv&#x11B;l&#xFD;/&#xE1;!</em>\nTohle byla slo&#x17E;it&#xE1; lekce, tak&#x17E;e bys na sebe m&#x11B;l/a b&#xFD;t hrd&#xFD;/&#xE1;.\nMy jsme na tebe velmi hrd&#xED; za to, &#x17E;e ses dostal/a tak daleko!</p>\n<p>Nau&#x10D;il/a ses:</p>\n<ul>\n<li><strong>Cyklus</strong> je zp&#x16F;sob, jak opakovat n&#x11B;jak&#xFD; postup n&#x11B;kolikr&#xE1;t po sob&#x11B;</li>\n<li><code>range</code> pom&#xE1;h&#xE1; kdy&#x17E; pot&#x159;ebuje&#x161; ur&#x10D;it&#xFD; konkr&#xE9;tn&#xED; po&#x10D;et opakov&#xE1;n&#xED;.</li>\n</ul>\n<p>M&#x16F;&#x17E;e&#x161; si j&#xED;t kr&#xE1;tce odpo&#x10D;inout &#x2013; prot&#xE1;hnout se, proj&#xED;t se,\nzav&#x159;&#xED;t o&#x10D;i &#x2013; ne&#x17E; se pust&#xED;me do dal&#x161;&#xED; kapitoly. :)</p>\n<p>&#x1F9C1;</p>\n\n\n        "
    }
  }
}