﻿<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xml" href="/cjs/examples.screen.xsl" media="screen"?>
<examples chapter="Želví grafika – cykly, procházení prvků objektů" directory="zelva.1">

  <!--use-math/-->

  <note>
      Nápovědy ke kódu jsou někdy opravdu jen nápovědy, ale často slouží jako rozšířený komentář, co a proč se v uvedených programech řeší. Proto je nepřeskakujte!
  </note>

  <theory>
      „Želví“ – nebo též relativní – grafika je poměrně elegantní způsob, jak se seznámit se základy programování v Python'u. Začněmež co nejjednoduššeji a cestou se naučíme používat smyčku <em>for-in</em> a procházení různých pythoních datových struktur prvek po prvku.
  </theory>


  <example>
    <text>
      Nakreslete pomocí želvy čtverec o hraně 100 kroků.
      <img src="_files/zelva/1-03.png" width="167" height="160" align="center" alt="čtverec"/>
    </text>
    <hint>
      <em>forward()</em>, <em>left()</em>
    </hint>
    <solution src="zelva.1/01.py" lang="python" />
  </example>

  <example>
    <text>
      Předchozí řešení má jednu velkou chybu – obrázek se sice nakreslí, ale program se následně ukončí, čímž obrázek zase hned zmizí. Doplňte předchozí program na jeho konci nějakou konsrtrukcí, která bude čekat, až program budete chtít skutečně ukončit vy sami.
    </text>
    <hint>
      Čekat můžete například vyžádáním si (blokujícího) vstupu od uživatele pomocí funkce <em>input()</em> nebo nekonečnou smyčkou nebo tak, jak se to v GUI-programech (což naše želva vlastně je, neboť okénko s kresbou je vykreslováno pomocí GUI-toolkitu TkInter) běžně dělá – globální GUI-čekací metodou.
    </hint>
    <solution src="zelva.1/02a.py" lang="python" />
    <solution src="zelva.1/02b.py" lang="python" />
    <solution src="zelva.1/02c.py" lang="python" />
    <solution src="zelva.1/02d.py" lang="python" />
  </example>

  <example>
    <text>
      Jelikož předchozí řešení monotónně opakují stejné kousky kódu, je na čase přepsat program za použití smyčky <em>for-in</em>. Udělejte to.
    </text>
    <solution src="zelva.1/03.py" lang="python" />
  </example>

  <example>
    <text>
      Želva rozumí mnoha příkazům – pomocí tzv. <strong>metod objektů</strong> (z hlediska programu je želva nějaký objekt, který něco umí) jí můžete nastavit mnoho vlastností. Pro začátek zkuste změnit barvu čtverce, třeba na zelenou.
      <img src="_files/zelva/1-04.png" width="167" height="160" align="center" alt="barevný čtverec"/>
    </text>
    <hint>
      <em>pencolor()</em>
    </hint>
    <solution src="zelva.1/04.py" lang="python" />
  </example>

  <example>
    <text>
      Nakreslené (uzavřené) obrazce umí želva také barvou vyplnit, a to samozřejmě i jinou než použitou pro kreslení. Zkuste to.
      <img src="_files/zelva/1-05.png" width="167" height="160" align="center" alt="barvou vyplněný čtverec"/>
    </text>
    <hint>
      <em>fillcolor()</em> nebo <em>color()</em>, metody <em>xxx_fill()</em>
    </hint>
    <solution src="zelva.1/05a.py" lang="python" />
    <solution src="zelva.1/05b.py" lang="python" />
  </example>

  <example>
    <text>
      Nakreslete každou hranu čtverce jinou barvou.
      <img src="_files/zelva/1-06.png" width="167" height="160" align="center" alt="barevný čtverec"/>
    </text>
    <hint>
      Mohli byste býti v pokušení zbavit se smyčky a použít kód z příkladu 2. Nicméně Python umí elegantně pomocí smyčky <em>for-in</em> procházet i prvky několika různých typů objektů. V řešení je postupně použita n-tice (první dvě varianty), seznam a nakonec množina. Všimněte si především, že zatímco n-tice a seznam jsou proiterovány v zapsaném pořadí barev, u množiny to nemusí být pravda!
    </hint>
    <solution src="zelva.1/06a.py" lang="python" />
    <solution src="zelva.1/06b.py" lang="python" />
    <solution src="zelva.1/06c.py" lang="python" />
    <solution src="zelva.1/06d.py" lang="python" />
  </example>


</examples>
