V této lekci si vyzkoušíš želví kreslení.
Pusť Python v interaktivním módu (bez souboru .py).
$ python
>>>
(Znaky >
a $
píše počítač, ne ty.
Na Windows bude místo $
znak
>
a před $
nebo
>
může být ještě něco dalšího.)
Pak napiš:
from turtle import forward
forward(50)
Ukáže se okýnko se šipkou, které nezavírej. Dej ho tak, abys viděla i příkazovou řádku i nové okýnko.
Želva je zrovna převlečená za šipku.
Ale funkce shape
ji umí odmaskovat:
from turtle import shape
shape('turtle')
Modul turtle
obsahuje spoustu dalších funkcí, kterými můžeš želvu ovládat.
Pojďme se na ně kouknout zblízka.
Želva se umí otáčet (doleva – left
a doprave – right
) a lézt po papíře
(dopředu – forward
).
Na ocase má připevněný štětec, kterým při pohybu kreslí čáru.
from turtle import forward, left, right
forward(50)
left(60)
forward(50)
right(60)
forward(50)
Zkus chvíli dávat želvě příkazy.
Když se ti výsledek nelíbí, můžeš buď zavřít kreslící okno
(nebo naimportovat a použít funkci clear()
) a zkusit to znovu.
Interaktivní mód je skvělý na hraní, ale teď přejdeme zase na soubory.
Vytvoř si v editoru nový soubor.
Ulož ho do adresáře pro dnešní lekci pod jménem zelva.py
.
Jestli adresář pro dnešní lekci ještě nemáš, vytvoř si ho!
Pojmenuj ho třeba 02
.
Soubor nepojmenovávej turtle.py
– z modulu turtle
budeš importovat.
Jestli chceš pro soubor použít jiné jméno, můžeš, ale
nepojmenovávej ho turtle.py
.
Do souboru napiš příkazy na nakreslení obrázku
a – pozor! – na konci programu zavolej funkci exitonclick
(naimportovanou z modulu turtle
).
Otázka
Co dělá funkce exitonclick
, kterou voláš na konci programu?
Až to budeš mít hotové, zkus začít kreslit obrázky:
Nakresli čtverec.
Čtverec má čtyři rovné strany a čtyři rohy po 90°.
Nakresli obdélník.
Zkus zařídit, aby se po nakreslení „dívala” želva doprava (tak jako na začátku).
Nakresli tři čtverce, každý otočený třeba o 20°.
Tolik kódu! Tohle musí jít nějak zjednodušit!
Jde. Pojďme se naučit jak v Pythonu nějakou činnost opakovat.
Udělej v editoru nový soubor a ulož ho jako cykly.py
.
Budeme v něm zkoušet cykly.
První opakovací program, který napíšeme, bude dělat tohle:
Do jazyka Python se to dá přeložit následovně:
for i in range(100):
print('Nikdy nebudu odsazovat o tři mezery!')
Na ono for i in range(100)
se detailněji podíváme za chvíli,
teď to pro nás bude “hlavička”, která říká “opakuj stokrát”.
Podobnou “hlavičku” už jsi viděla: příkaz if
.
Stejně jako u if
tu máme na konci dvojtečku a za hlavičkou následuje
odsazený blok – tělo příkazu; to na co se hlavička vztahuje.
Tělo příkazu for
se opakuje stále dokola.
Zkus napsat ještě jeden vzorový program, který v češtině zní:
V Pythonu se tento program zapíše jako:
for pozdrav in 'Ahoj', 'Hello', 'Hola', 'Hei', 'SYN':
print(pozdrav + '!')
Opět je tu hlavička a tělo příkazu.
Tentokrát se na hlavičku podívej pozorněji.
Pythonní for promenna in sekvence
znamená „Pro každé promenna ze sekvence“.
Jméno proměnné si volíš sama.
Příkaz for
danou proměnnou vždy na začátku bloku nastaví na aktuální
hodnotu.
Program výše funguje úplně stejně, jako kdybys napsala:
pozdrav = 'Ahoj'
print(pozdrav + '!')
pozdrav = 'Hello'
print(pozdrav + '!')
pozdrav = 'Hola'
print(pozdrav + '!')
pozdrav = 'Hei'
print(pozdrav + '!')
pozdrav = 'SYN'
print(pozdrav + '!')
Vraťme se k for i in range(100)
.
Už víš, že to znamená „Pro každé i z range(100)
“.
Co je ale to range
? Když si ho vypíšeš, nevypadne nic vysvětlujícího:
>>> range(100)
range(0, 100)
Je ale použité jako „sekvence“
v for promenna in sekvence
.
Je to nějaký výčet, nějaká posloupnost hodnot.
A teď už umíš vypsat, jaké to jsou!
for i in range(10): # Doporučuju použít jen 5 místo 100
print(i)
Program spusť. Jaká čísla se vypíšou?
Funkce range(n)
vrací sekvenci čísel.
Začíná od 0 a čísel v ní je přesně n.
(Na samotné n se tedy už nedostane.)
Často se for i in range(n)
používá jako “Opakuj n-krát“.
V takovém případě nás proměnná i – „počitadlo“ – nezajímá.
V programu ji jednoduše nepoužijeme.
Teď by už mělo být jasné, jak funguje původní program:
for i in range(100):
print('Nikdy nebudu odsazovat o tři mezery!')
Python píše hlášky, jednu za druhou, a u toho si v promněnné i počítá, jak už je daleko.
A znovu ke kreslení, tentokrát s použitím cyklů!
Nakresli čtverec. To se dělá následovně:
Funkce penup
a pendown
z modulu turtle
řeknou želvě,
aby přestala, resp. začala kreslit.
Zkus si to:
from turtle import forward, penup, pendown, exitonclick
forward(30)
penup() # od teď želva nekreslí
forward(5)
pendown() # od teď želva zase kreslí
forward(30)
exitonclick()
Zkus nakreslit dlouhou přerušovanou čáru.
Pak zkus zařídit, aby jednotlivé čárky byly postupně větší a větší.
Nápověda
První čárka je dlouhá 1 jednotku, druhá 2 jednotky, třetí 3, atd.
Dokonce můžeš na začátek dát prázdnou čárku (0 jednotek) a mít tak délky 0, 1, 2, 3, 4, …
Nakonec nakresli 3 čtverce, každý otočený o 20°.
Tentokrát už víš, jak to dělat chytře: opakuj pomocí příkazu
for
, ne kopírováním kódu.
Máš-li hotovo, zkus nakreslit schody:
A máš-li i schody, zkus nakreslit těchto šest (nebo sedm?) šestiúhelníků:
Už víš, že:
print("Tady je pár čísel:")
for cislo in 8, 45, 9, 21:
print(cislo)
funguje jako:
print("Tady je pár čísel:")
cislo = 8
print(cislo)
cislo = 45
print(cislo)
cislo = 9
print(cislo)
cislo = 21
print(cislo)
Zkus popsat, jak pracuje následující program.
soucet = 0
for cislo in 8, 45, 9, 21:
soucet = soucet + cislo
print(soucet)
{ "data": { "sessionMaterial": { "id": "session-material:2019/brno-jaro-2019-pondeli:cycles:1", "title": "Želva a cykly", "html": "\n \n \n\n <h1>🐍 🐢</h1>\n<p>V této lekci si vyzkoušíš <em>želví kreslení</em>.</p>\n<p>Pusť Python v <em>interaktivním módu</em> (bez souboru .py).</p>\n<div class=\"highlight\"><pre><span></span><span class=\"go\">$ python</span>\n\n<span class=\"go\">>>></span>\n</pre></div><div class=\"admonition note\"><p>(Znaky <code>></code> a <code>$</code> píše počítač, ne ty.\nNa Windows bude místo <code>$</code> znak\n<code>></code> a před <code>$</code> nebo\n<code>></code> může být ještě něco dalšího.)</p>\n</div><p>Pak napiš:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">turtle</span> <span class=\"kn\">import</span> <span class=\"n\">forward</span>\n\n<span class=\"n\">forward</span><span class=\"p\">(</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n</pre></div><p>Ukáže se okýnko se šipkou, které nezavírej.\nDej ho tak, abys viděla i příkazovou řádku\ni nové okýnko.</p>\n<h2>A kde je ta želva?</h2>\n<p>Želva je zrovna převlečená za šipku.\nAle funkce <code>shape</code> ji umí odmaskovat:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">turtle</span> <span class=\"kn\">import</span> <span class=\"n\">shape</span>\n\n<span class=\"n\">shape</span><span class=\"p\">(</span><span class=\"s1\">'turtle'</span><span class=\"p\">)</span>\n</pre></div><p>Modul <code>turtle</code> obsahuje spoustu dalších funkcí, kterými můžeš želvu ovládat.\nPojďme se na ně kouknout zblízka.</p>\n<h2>Otáčení</h2>\n<p>Želva se umí otáčet (doleva – <code>left</code> a doprave – <code>right</code>) a lézt po papíře\n(dopředu – <code>forward</code>).\nNa ocase má připevněný štětec, kterým při pohybu kreslí čáru.</p>\n<div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">turtle</span> <span class=\"kn\">import</span> <span class=\"n\">forward</span><span class=\"p\">,</span> <span class=\"n\">left</span><span class=\"p\">,</span> <span class=\"n\">right</span>\n\n<span class=\"n\">forward</span><span class=\"p\">(</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n<span class=\"n\">left</span><span class=\"p\">(</span><span class=\"mi\">60</span><span class=\"p\">)</span>\n<span class=\"n\">forward</span><span class=\"p\">(</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n<span class=\"n\">right</span><span class=\"p\">(</span><span class=\"mi\">60</span><span class=\"p\">)</span>\n<span class=\"n\">forward</span><span class=\"p\">(</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n</pre></div><p>Zkus chvíli dávat želvě příkazy.\nKdyž se ti výsledek nelíbí, můžeš buď zavřít kreslící okno\n(nebo naimportovat a použít funkci <code>clear()</code>) a zkusit to znovu.</p>\n<h2>Želví program</h2>\n<p>Interaktivní mód je skvělý na hraní,\nale teď přejdeme zase na soubory.</p>\n<p>Vytvoř si v editoru nový soubor.\nUlož ho do adresáře pro dnešní lekci pod jménem <code>zelva.py</code>.</p>\n<div class=\"admonition note\"><p>Jestli adresář pro dnešní lekci ještě nemáš, vytvoř si ho!\nPojmenuj ho třeba <code>02</code>.</p>\n</div><div class=\"admonition warning\"><p>Soubor nepojmenovávej <code>turtle.py</code> – z modulu <code>turtle</code> budeš importovat.</p>\n</div><p>Jestli chceš pro soubor použít jiné jméno, můžeš, ale\nnepojmenovávej ho <code>turtle.py</code>.</p>\n<p>Do souboru napiš příkazy na nakreslení obrázku\na – pozor! – na konci programu zavolej funkci <code>exitonclick</code>\n(naimportovanou z modulu <code>turtle</code>).</p>\n<div class=\"admonition note\"><p class=\"admonition-title\">Otázka</p>\n<p>Co dělá funkce <code>exitonclick</code>, kterou voláš na konci programu?</p>\n</div><p>Až to budeš mít hotové, zkus začít kreslit obrázky:</p>\n<h3>Čtverec</h3>\n<p>Nakresli čtverec.</p>\n<p><img src=\"/2019/brno-jaro-2019-pondeli/intro/turtle/static/turtle-square.png\" alt=\"Želví čtverec\"></p>\n<p>Čtverec má čtyři rovné strany\na čtyři rohy po 90°.</p>\n<div class=\"solution\" id=\"solution-0\">\n <h3>Řešení</h3>\n <div class=\"solution-cover\">\n <a href=\"/2019/brno-jaro-2019-pondeli/intro/turtle/index/solutions/0/\"><span class=\"link-text\">Ukázat řešení</span></a>\n </div>\n <div class=\"solution-body\" aria-hidden=\"true\">\n <div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">turtle</span> <span class=\"kn\">import</span> <span class=\"n\">forward</span><span class=\"p\">,</span> <span class=\"n\">left</span><span class=\"p\">,</span> <span class=\"n\">exitonclick</span>\n\n<span class=\"n\">forward</span><span class=\"p\">(</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n<span class=\"n\">left</span><span class=\"p\">(</span><span class=\"mi\">90</span><span class=\"p\">)</span>\n<span class=\"n\">forward</span><span class=\"p\">(</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n<span class=\"n\">left</span><span class=\"p\">(</span><span class=\"mi\">90</span><span class=\"p\">)</span>\n<span class=\"n\">forward</span><span class=\"p\">(</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n<span class=\"n\">left</span><span class=\"p\">(</span><span class=\"mi\">90</span><span class=\"p\">)</span>\n<span class=\"n\">forward</span><span class=\"p\">(</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n<span class=\"n\">left</span><span class=\"p\">(</span><span class=\"mi\">90</span><span class=\"p\">)</span>\n\n<span class=\"n\">exitonclick</span><span class=\"p\">()</span>\n</pre></div>\n </div>\n</div><h3>Obdélník</h3>\n<p>Nakresli obdélník.</p>\n<p>Zkus zařídit, aby se po nakreslení „dívala” želva doprava (tak jako na začátku).</p>\n<p><img src=\"/2019/brno-jaro-2019-pondeli/intro/turtle/static/turtle-rect.png\" alt=\"Želví obdélník\"></p>\n<div class=\"solution\" id=\"solution-1\">\n <h3>Řešení</h3>\n <div class=\"solution-cover\">\n <a href=\"/2019/brno-jaro-2019-pondeli/intro/turtle/index/solutions/1/\"><span class=\"link-text\">Ukázat řešení</span></a>\n </div>\n <div class=\"solution-body\" aria-hidden=\"true\">\n <div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">turtle</span> <span class=\"kn\">import</span> <span class=\"n\">forward</span><span class=\"p\">,</span> <span class=\"n\">left</span><span class=\"p\">,</span> <span class=\"n\">exitonclick</span>\n\n<span class=\"n\">forward</span><span class=\"p\">(</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n<span class=\"n\">left</span><span class=\"p\">(</span><span class=\"mi\">90</span><span class=\"p\">)</span>\n<span class=\"n\">forward</span><span class=\"p\">(</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n<span class=\"n\">left</span><span class=\"p\">(</span><span class=\"mi\">90</span><span class=\"p\">)</span>\n<span class=\"n\">forward</span><span class=\"p\">(</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n<span class=\"n\">left</span><span class=\"p\">(</span><span class=\"mi\">90</span><span class=\"p\">)</span>\n<span class=\"n\">forward</span><span class=\"p\">(</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n<span class=\"n\">left</span><span class=\"p\">(</span><span class=\"mi\">90</span><span class=\"p\">)</span>\n\n<span class=\"n\">exitonclick</span><span class=\"p\">()</span>\n</pre></div>\n </div>\n</div><h3>Tři čtverce</h3>\n<p>Nakresli tři čtverce, každý otočený třeba o 20°.</p>\n<p><img src=\"/2019/brno-jaro-2019-pondeli/intro/turtle/static/turtle-squares.png\" alt=\"Tři želví čtverce\"></p>\n<div class=\"solution\" id=\"solution-2\">\n <h3>Řešení</h3>\n <div class=\"solution-cover\">\n <a href=\"/2019/brno-jaro-2019-pondeli/intro/turtle/index/solutions/2/\"><span class=\"link-text\">Ukázat řešení</span></a>\n </div>\n <div class=\"solution-body\" aria-hidden=\"true\">\n <div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">turtle</span> <span class=\"kn\">import</span> <span class=\"n\">forward</span><span class=\"p\">,</span> <span class=\"n\">left</span><span class=\"p\">,</span> <span class=\"n\">exitonclick</span>\n\n<span class=\"n\">forward</span><span class=\"p\">(</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n<span class=\"n\">left</span><span class=\"p\">(</span><span class=\"mi\">90</span><span class=\"p\">)</span>\n<span class=\"n\">forward</span><span class=\"p\">(</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n<span class=\"n\">left</span><span class=\"p\">(</span><span class=\"mi\">90</span><span class=\"p\">)</span>\n<span class=\"n\">forward</span><span class=\"p\">(</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n<span class=\"n\">left</span><span class=\"p\">(</span><span class=\"mi\">90</span><span class=\"p\">)</span>\n<span class=\"n\">forward</span><span class=\"p\">(</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n<span class=\"n\">left</span><span class=\"p\">(</span><span class=\"mi\">90</span><span class=\"p\">)</span>\n\n<span class=\"n\">left</span><span class=\"p\">(</span><span class=\"mi\">20</span><span class=\"p\">)</span>\n\n<span class=\"n\">forward</span><span class=\"p\">(</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n<span class=\"n\">left</span><span class=\"p\">(</span><span class=\"mi\">90</span><span class=\"p\">)</span>\n<span class=\"n\">forward</span><span class=\"p\">(</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n<span class=\"n\">left</span><span class=\"p\">(</span><span class=\"mi\">90</span><span class=\"p\">)</span>\n<span class=\"n\">forward</span><span class=\"p\">(</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n<span class=\"n\">left</span><span class=\"p\">(</span><span class=\"mi\">90</span><span class=\"p\">)</span>\n<span class=\"n\">forward</span><span class=\"p\">(</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n<span class=\"n\">left</span><span class=\"p\">(</span><span class=\"mi\">90</span><span class=\"p\">)</span>\n\n<span class=\"n\">left</span><span class=\"p\">(</span><span class=\"mi\">20</span><span class=\"p\">)</span>\n\n<span class=\"n\">forward</span><span class=\"p\">(</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n<span class=\"n\">left</span><span class=\"p\">(</span><span class=\"mi\">90</span><span class=\"p\">)</span>\n<span class=\"n\">forward</span><span class=\"p\">(</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n<span class=\"n\">left</span><span class=\"p\">(</span><span class=\"mi\">90</span><span class=\"p\">)</span>\n<span class=\"n\">forward</span><span class=\"p\">(</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n<span class=\"n\">left</span><span class=\"p\">(</span><span class=\"mi\">90</span><span class=\"p\">)</span>\n<span class=\"n\">forward</span><span class=\"p\">(</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n<span class=\"n\">left</span><span class=\"p\">(</span><span class=\"mi\">90</span><span class=\"p\">)</span>\n\n<span class=\"n\">exitonclick</span><span class=\"p\">()</span>\n</pre></div>\n </div>\n</div><p>Tolik kódu! Tohle musí jít nějak zjednodušit!</p>\n<p>Jde.\nPojďme se naučit jak v Pythonu nějakou činnost opakovat.</p>\n<h2>Jak opakovat – a neopakovat <em>se</em></h2>\n<p>Udělej v editoru nový soubor a ulož ho jako <code>cykly.py</code>.\nBudeme v něm zkoušet <em>cykly</em>.</p>\n<p>První opakovací program, který napíšeme, bude dělat tohle:</p>\n<ul>\n<li>Stokrát po sobě:<ul>\n<li>Napiš "Nikdy nebudu odsazovat o tři mezery!"</li>\n</ul>\n</li>\n</ul>\n<p>Do jazyka Python se to dá přeložit následovně:</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\">100</span><span class=\"p\">):</span>\n <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">'Nikdy nebudu odsazovat o tři mezery!'</span><span class=\"p\">)</span>\n</pre></div><p>Na ono <code>for i in range(100)</code> se detailněji podíváme za chvíli,\nteď to pro nás bude “hlavička”, která říká “opakuj stokrát”.</p>\n<p>Podobnou “hlavičku” už jsi viděla: příkaz <code>if</code>.\nStejně jako u <code>if</code> tu máme na konci dvojtečku a za hlavičkou následuje\nodsazený blok – <em>tělo</em> příkazu; to na co se hlavička vztahuje.\nTělo příkazu <code>for</code> se opakuje stále dokola.</p>\n<h3>Výčet</h3>\n<p>Zkus napsat ještě jeden vzorový program, který v češtině zní:</p>\n<ul>\n<li>Pro každý <var>pozdrav</var> z výčtu: „Ahoj“, “Hello”, “Hola”, ”Hei”, "SYN":<ul>\n<li>Vypiš <var>pozdrav</var> a za ním vykřičník.</li>\n</ul>\n</li>\n</ul>\n<p>V Pythonu se tento program zapíše jako:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"k\">for</span> <span class=\"n\">pozdrav</span> <span class=\"ow\">in</span> <span class=\"s1\">'Ahoj'</span><span class=\"p\">,</span> <span class=\"s1\">'Hello'</span><span class=\"p\">,</span> <span class=\"s1\">'Hola'</span><span class=\"p\">,</span> <span class=\"s1\">'Hei'</span><span class=\"p\">,</span> <span class=\"s1\">'SYN'</span><span class=\"p\">:</span>\n <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">pozdrav</span> <span class=\"o\">+</span> <span class=\"s1\">'!'</span><span class=\"p\">)</span>\n</pre></div><p>Opět je tu hlavička a tělo příkazu.\nTentokrát se na hlavičku podívej pozorněji.\nPythonní <code>for <var>promenna</var> in <var>sekvence</var></code>\nznamená „Pro každé <var>promenna</var> ze <var>sekvence</var>“.</p>\n<p>Jméno proměnné si volíš sama.\nPříkaz <code>for</code> danou proměnnou vždy na začátku bloku <em>nastaví</em> na aktuální\nhodnotu.\nProgram výše funguje úplně stejně, jako kdybys napsala:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">pozdrav</span> <span class=\"o\">=</span> <span class=\"s1\">'Ahoj'</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">pozdrav</span> <span class=\"o\">+</span> <span class=\"s1\">'!'</span><span class=\"p\">)</span>\n\n<span class=\"n\">pozdrav</span> <span class=\"o\">=</span> <span class=\"s1\">'Hello'</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">pozdrav</span> <span class=\"o\">+</span> <span class=\"s1\">'!'</span><span class=\"p\">)</span>\n\n<span class=\"n\">pozdrav</span> <span class=\"o\">=</span> <span class=\"s1\">'Hola'</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">pozdrav</span> <span class=\"o\">+</span> <span class=\"s1\">'!'</span><span class=\"p\">)</span>\n\n<span class=\"n\">pozdrav</span> <span class=\"o\">=</span> <span class=\"s1\">'Hei'</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">pozdrav</span> <span class=\"o\">+</span> <span class=\"s1\">'!'</span><span class=\"p\">)</span>\n\n<span class=\"n\">pozdrav</span> <span class=\"o\">=</span> <span class=\"s1\">'SYN'</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">pozdrav</span> <span class=\"o\">+</span> <span class=\"s1\">'!'</span><span class=\"p\">)</span>\n</pre></div><h3>Range</h3>\n<p>Vraťme se k <code>for i in range(100)</code>.\nUž víš, že to znamená „Pro každé <var>i</var> z <code>range(100)</code>“.\nCo je ale to <code>range</code>? Když si ho vypíšeš, nevypadne nic vysvětlujícího:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">>>> </span><span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n<span class=\"go\">range(0, 100)</span>\n</pre></div><p>Je ale použité jako „sekvence“\nv <code>for <var>promenna</var> in <var>sekvence</var></code>.\nJe to nějaký výčet, nějaká posloupnost hodnot.\nA teď už umíš vypsat, jaké to jsou!</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\"># Doporučuju použít jen 5 místo 100</span>\n <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">)</span>\n</pre></div><p>Program spusť. Jaká čísla se vypíšou?</p>\n<div class=\"solution\" id=\"solution-3\">\n <h3>Řešení</h3>\n <div class=\"solution-cover\">\n <a href=\"/2019/brno-jaro-2019-pondeli/intro/turtle/index/solutions/3/\"><span class=\"link-text\">Ukázat řešení</span></a>\n </div>\n <div class=\"solution-body\" aria-hidden=\"true\">\n <p>Vypíšou se čísla od 0 do 4!\nProgram funguje steně, jako kdybys napsala:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">i</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">)</span>\n<span class=\"n\">i</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">)</span>\n<span class=\"n\">i</span> <span class=\"o\">=</span> <span class=\"mi\">2</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">)</span>\n<span class=\"n\">i</span> <span class=\"o\">=</span> <span class=\"mi\">3</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">)</span>\n<span class=\"n\">i</span> <span class=\"o\">=</span> <span class=\"mi\">4</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">)</span>\n</pre></div>\n </div>\n</div><p>Funkce <code>range(n)</code> vrací <em>sekvenci čísel</em>.\nZačíná od 0 a čísel v ní je přesně <var>n</var>.\n(Na samotné <var>n</var> se tedy už nedostane.)</p>\n<p>Často se <code>for i in range(n)</code> používá jako “Opakuj <var>n</var>-krát“.\nV takovém případě nás proměnná <var>i</var> – „počitadlo“ – nezajímá.\nV programu ji jednoduše nepoužijeme.</p>\n<p>Teď by už mělo být jasné, jak funguje původní program:</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\">100</span><span class=\"p\">):</span>\n <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">'Nikdy nebudu odsazovat o tři mezery!'</span><span class=\"p\">)</span>\n</pre></div><p>Python píše hlášky, jednu za druhou, a u toho si v promněnné <var>i</var>\npočítá, jak už je daleko.</p>\n<h2>Čtverec II</h2>\n<p>A znovu ke kreslení, tentokrát s použitím cyklů!</p>\n<p>Nakresli čtverec. To se dělá následovně:</p>\n<ul>\n<li>Čtyřikrát:<ul>\n<li>Popojdi dopředu (a kresli přitom čáru)</li>\n<li>Otoč se o 90°</li>\n</ul>\n</li>\n</ul>\n<p><img src=\"/2019/brno-jaro-2019-pondeli/intro/turtle/static/turtle-square.png\" alt=\"Želví čtverec\"></p>\n<div class=\"solution\" id=\"solution-4\">\n <h3>Řešení</h3>\n <div class=\"solution-cover\">\n <a href=\"/2019/brno-jaro-2019-pondeli/intro/turtle/index/solutions/4/\"><span class=\"link-text\">Ukázat řešení</span></a>\n </div>\n <div class=\"solution-body\" aria-hidden=\"true\">\n <div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">turtle</span> <span class=\"kn\">import</span> <span class=\"n\">forward</span><span class=\"p\">,</span> <span class=\"n\">left</span><span class=\"p\">,</span> <span class=\"n\">exitonclick</span>\n\n<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\">4</span><span class=\"p\">):</span>\n <span class=\"n\">forward</span><span class=\"p\">(</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n <span class=\"n\">left</span><span class=\"p\">(</span><span class=\"mi\">90</span><span class=\"p\">)</span>\n\n<span class=\"n\">exitonclick</span><span class=\"p\">()</span>\n</pre></div>\n </div>\n</div><h2>Přerušovaná čára</h2>\n<p>Funkce <code>penup</code> a <code>pendown</code>\nz modulu <code>turtle</code> řeknou želvě,\naby přestala, resp. začala kreslit.\nZkus si to:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">turtle</span> <span class=\"kn\">import</span> <span class=\"n\">forward</span><span class=\"p\">,</span> <span class=\"n\">penup</span><span class=\"p\">,</span> <span class=\"n\">pendown</span><span class=\"p\">,</span> <span class=\"n\">exitonclick</span>\n\n<span class=\"n\">forward</span><span class=\"p\">(</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n<span class=\"n\">penup</span><span class=\"p\">()</span> <span class=\"c1\"># od teď želva nekreslí</span>\n<span class=\"n\">forward</span><span class=\"p\">(</span><span class=\"mi\">5</span><span class=\"p\">)</span>\n<span class=\"n\">pendown</span><span class=\"p\">()</span> <span class=\"c1\"># od teď želva zase kreslí</span>\n<span class=\"n\">forward</span><span class=\"p\">(</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n\n<span class=\"n\">exitonclick</span><span class=\"p\">()</span>\n</pre></div><p>Zkus nakreslit dlouhou přerušovanou čáru.</p>\n<p><img src=\"/2019/brno-jaro-2019-pondeli/intro/turtle/static/turtle-dashed.png\" alt=\"Želva a přerušovaná čára\"></p>\n<div class=\"solution\" id=\"solution-5\">\n <h3>Řešení</h3>\n <div class=\"solution-cover\">\n <a href=\"/2019/brno-jaro-2019-pondeli/intro/turtle/index/solutions/5/\"><span class=\"link-text\">Ukázat řešení</span></a>\n </div>\n <div class=\"solution-body\" aria-hidden=\"true\">\n <div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">turtle</span> <span class=\"kn\">import</span> <span class=\"n\">forward</span><span class=\"p\">,</span> <span class=\"n\">penup</span><span class=\"p\">,</span> <span class=\"n\">pendown</span><span class=\"p\">,</span> <span class=\"n\">exitonclick</span>\n\n<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>\n <span class=\"n\">forward</span><span class=\"p\">(</span><span class=\"mi\">10</span><span class=\"p\">)</span>\n <span class=\"n\">penup</span><span class=\"p\">()</span>\n <span class=\"n\">forward</span><span class=\"p\">(</span><span class=\"mi\">5</span><span class=\"p\">)</span>\n <span class=\"n\">pendown</span><span class=\"p\">()</span>\n\n<span class=\"n\">exitonclick</span><span class=\"p\">()</span>\n</pre></div>\n </div>\n</div><p>Pak zkus zařídit, aby jednotlivé čárky byly postupně\nvětší a větší.</p>\n<p><img src=\"/2019/brno-jaro-2019-pondeli/intro/turtle/static/turtle-dashed2.png\" alt=\"Želva a přerušovaná čára\"></p>\n<div class=\"admonition note\"><p class=\"admonition-title\">Nápověda</p>\n<p>První čárka je dlouhá 1 jednotku, druhá 2 jednotky, třetí 3, atd.</p>\n<p>Dokonce můžeš na začátek dát prázdnou čárku (0 jednotek)\na mít tak délky 0, 1, 2, 3, 4, …</p>\n</div><div class=\"solution\" id=\"solution-6\">\n <h3>Řešení</h3>\n <div class=\"solution-cover\">\n <a href=\"/2019/brno-jaro-2019-pondeli/intro/turtle/index/solutions/6/\"><span class=\"link-text\">Ukázat řešení</span></a>\n </div>\n <div class=\"solution-body\" aria-hidden=\"true\">\n <div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">turtle</span> <span class=\"kn\">import</span> <span class=\"n\">forward</span><span class=\"p\">,</span> <span class=\"n\">penup</span><span class=\"p\">,</span> <span class=\"n\">pendown</span><span class=\"p\">,</span> <span class=\"n\">left</span><span class=\"p\">,</span> <span class=\"n\">exitonclick</span>\n\n<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\">20</span><span class=\"p\">):</span>\n <span class=\"n\">forward</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">)</span>\n <span class=\"n\">penup</span><span class=\"p\">()</span>\n <span class=\"n\">forward</span><span class=\"p\">(</span><span class=\"mi\">5</span><span class=\"p\">)</span>\n <span class=\"n\">pendown</span><span class=\"p\">()</span>\n\n<span class=\"n\">exitonclick</span><span class=\"p\">()</span>\n</pre></div>\n </div>\n</div><h3>Tři čtverce</h3>\n<p>Nakonec nakresli 3 čtverce, každý otočený o 20°.\nTentokrát už víš, jak to dělat chytře: opakuj pomocí příkazu\n<code>for</code>, ne kopírováním kódu.</p>\n<p><img src=\"/2019/brno-jaro-2019-pondeli/intro/turtle/static/turtle-squares.png\" alt=\"Tři želví čtverce\"></p>\n<ul>\n<li>Třikrát:<ul>\n<li>Nakresli čtverec (viz předchozí úloha)</li>\n<li>Otoč se o 20°</li>\n</ul>\n</li>\n</ul>\n<div class=\"solution\" id=\"solution-7\">\n <h3>Řešení</h3>\n <div class=\"solution-cover\">\n <a href=\"/2019/brno-jaro-2019-pondeli/intro/turtle/index/solutions/7/\"><span class=\"link-text\">Ukázat řešení</span></a>\n </div>\n <div class=\"solution-body\" aria-hidden=\"true\">\n <div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">turtle</span> <span class=\"kn\">import</span> <span class=\"n\">forward</span><span class=\"p\">,</span> <span class=\"n\">left</span><span class=\"p\">,</span> <span class=\"n\">right</span><span class=\"p\">,</span> <span class=\"n\">speed</span><span class=\"p\">,</span> <span class=\"n\">exitonclick</span>\n\n<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\">3</span><span class=\"p\">):</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\">4</span><span class=\"p\">):</span>\n <span class=\"n\">forward</span><span class=\"p\">(</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n <span class=\"n\">left</span><span class=\"p\">(</span><span class=\"mi\">90</span><span class=\"p\">)</span>\n <span class=\"n\">left</span><span class=\"p\">(</span><span class=\"mi\">20</span><span class=\"p\">)</span>\n\n<span class=\"n\">exitonclick</span><span class=\"p\">()</span>\n</pre></div>\n </div>\n</div><h2>Úkol navíc</h2>\n<p>Máš-li hotovo, zkus nakreslit schody:</p>\n<p><img src=\"/2019/brno-jaro-2019-pondeli/intro/turtle/static/turtle-stairs.png\" alt=\"Želví schody\"></p>\n<p>A máš-li i schody, zkus nakreslit těchto šest (nebo sedm?) šestiúhelníků:</p>\n<p><img src=\"/2019/brno-jaro-2019-pondeli/intro/turtle/static/turtle-hexagons.png\" alt=\"Želví plástev\"></p>\n<h3>Přepisování proměnných</h3>\n<p>Už víš, že:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s2\">"Tady je pár čísel:"</span><span class=\"p\">)</span>\n\n<span class=\"k\">for</span> <span class=\"n\">cislo</span> <span class=\"ow\">in</span> <span class=\"mi\">8</span><span class=\"p\">,</span> <span class=\"mi\">45</span><span class=\"p\">,</span> <span class=\"mi\">9</span><span class=\"p\">,</span> <span class=\"mi\">21</span><span class=\"p\">:</span>\n <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">cislo</span><span class=\"p\">)</span>\n</pre></div><p>funguje jako:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s2\">"Tady je pár čísel:"</span><span class=\"p\">)</span>\n\n<span class=\"n\">cislo</span> <span class=\"o\">=</span> <span class=\"mi\">8</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">cislo</span><span class=\"p\">)</span>\n\n<span class=\"n\">cislo</span> <span class=\"o\">=</span> <span class=\"mi\">45</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">cislo</span><span class=\"p\">)</span>\n\n<span class=\"n\">cislo</span> <span class=\"o\">=</span> <span class=\"mi\">9</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">cislo</span><span class=\"p\">)</span>\n\n<span class=\"n\">cislo</span> <span class=\"o\">=</span> <span class=\"mi\">21</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">cislo</span><span class=\"p\">)</span>\n</pre></div><p>Zkus popsat, jak pracuje následující program.</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">soucet</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n\n<span class=\"k\">for</span> <span class=\"n\">cislo</span> <span class=\"ow\">in</span> <span class=\"mi\">8</span><span class=\"p\">,</span> <span class=\"mi\">45</span><span class=\"p\">,</span> <span class=\"mi\">9</span><span class=\"p\">,</span> <span class=\"mi\">21</span><span class=\"p\">:</span>\n <span class=\"n\">soucet</span> <span class=\"o\">=</span> <span class=\"n\">soucet</span> <span class=\"o\">+</span> <span class=\"n\">cislo</span>\n\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">soucet</span><span class=\"p\">)</span>\n</pre></div><div class=\"solution\" id=\"solution-8\">\n <h3>Řešení</h3>\n <div class=\"solution-cover\">\n <a href=\"/2019/brno-jaro-2019-pondeli/intro/turtle/index/solutions/8/\"><span class=\"link-text\">Ukázat řešení</span></a>\n </div>\n <div class=\"solution-body\" aria-hidden=\"true\">\n <div class=\"highlight\"><pre><span></span><span class=\"n\">soucet</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n\n<span class=\"n\">cislo</span> <span class=\"o\">=</span> <span class=\"mi\">8</span>\n<span class=\"n\">soucet</span> <span class=\"o\">=</span> <span class=\"n\">soucet</span> <span class=\"o\">+</span> <span class=\"n\">cislo</span>\n\n<span class=\"n\">cislo</span> <span class=\"o\">=</span> <span class=\"mi\">45</span>\n<span class=\"n\">soucet</span> <span class=\"o\">=</span> <span class=\"n\">soucet</span> <span class=\"o\">+</span> <span class=\"n\">cislo</span>\n\n<span class=\"n\">cislo</span> <span class=\"o\">=</span> <span class=\"mi\">9</span>\n<span class=\"n\">soucet</span> <span class=\"o\">=</span> <span class=\"n\">soucet</span> <span class=\"o\">+</span> <span class=\"n\">cislo</span>\n\n<span class=\"n\">cislo</span> <span class=\"o\">=</span> <span class=\"mi\">21</span>\n<span class=\"n\">soucet</span> <span class=\"o\">=</span> <span class=\"n\">soucet</span> <span class=\"o\">+</span> <span class=\"n\">cislo</span>\n\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">soucet</span><span class=\"p\">)</span>\n</pre></div><p>Příkaz <code>soucet = soucet + cislo</code> vypočítá hodnotu\n<code>soucet + cislo</code>, tedy přičte aktuální číslo k součtu.\nVýsledek uloží opět do proměnné <code>soucet</code>.\nNová hodnota <code>soucet</code> se pak použije v dalším průchodu cyklem.</p>\n<p>Na začátku je součet 0 a na konci se součet všech čísel vypíše.</p>\n </div>\n</div>\n\n\n " } } }