﻿<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xml" href="/cjs/examples.screen.xsl" media="screen"?>
<examples chapter="Výjimky" directory="vyjimky">

    <note>
        Při řešení těchto příkladů využijte nejdříve výjimky. Teprve poté, má-li to smysl, zkuste stejné zadání vyřešit i bez nich.
    </note>

<!--
  <example>
    <text>
    </text>
    <hint>
    </hint>
    <solution src="vyjimky/.py" lang="python" />
  </example>
-->


    <example>
        <text>
            Napište kód, který postupně smaže všechny prvky seznamu.
        </text>
        <hint>
            Metoda <em>pop()</em> na seznamu z něj postupně odstraňuje (a zároveň i vrací) všechny jeho prvky (bez parametru vždy aktuální poslední). Jakmile již není dále co odstraňovat, vyhodí výjimku <em>IndexError</em>.
        </hint>
        <solution src="vyjimky/01a.py" lang="python" />
        <solution src="vyjimky/01b.py" lang="python" />
    </example>

    <example>
        <text>
            Napište kód, který v zadaném seznamu smaže všechny výskyty daného prvku.
        </text>
        <hint>
            Například můžete použít metodu <code>remove(PRVEK)</code>, která na seznamu smaže první výskyt zadaného prvku a pokud ho nenajde, vyhodí výjimku <em>ValueError</em>. Ale není to jediná možnost, byť je asi nejelegantnější. Alespoň dokud nepoužijete generátorovou notaci, na kterou nemá nic ^_~
        </hint>
        <solution src="vyjimky/02a.py" lang="python" />
        <solution src="vyjimky/02b.py" lang="python" />
        <solution src="vyjimky/02_neA.py" lang="python" />
        <solution src="vyjimky/02_neB.py" lang="python" />
    </example>

    <example>
        <text>
            Napište kód, který postupně smaže všechny prvky slovníku.
        </text>
        <hint>
            Metoda <em>popitem()</em> na slovníku z něj postupně odstraňuje (a zároveň je i vrací) všechny dvojce klíč-hodnota. Jakmile již není dále co odstraňovat, vyhodí výjimku <em>KeyError</em>.
        </hint>
        <solution src="vyjimky/03.py" lang="python" />
    </example>

    <example>
        <text>
            Napište kód, který v zadaném slovníku smaže všechny prvky (tedy dvojce klíč-hodnota), jejichž hodnota se rovná zadané.
        </text>
        <hint>
            Metoda <code>pop(KLÍČ)</code> smaže na slovníku výskyt zadaného prvku a pokud ho nenajde, vyhodí výjimku <em>KeyError</em>. Ovšem zrovna tahle úloha se přes výjimky řeší neuvěřitelně krkolomně.
        </hint>
        <solution src="vyjimky/04_neA.py" lang="python" />
        <solution src="vyjimky/04_neB.py" lang="python" />
    </example>

    <example>
        <text>
            Napište kód, který postupně smaže všechny prvky množiny.
        </text>
        <hint>
            Metoda <em>pop()</em> na množině z ní postupně odstraňuje (a zároveň i vrací) všechny její prvky. Jakmile již není dále co odstraňovat, vyhodí výjimku <em>KeyError</em>.
        </hint>
        <solution src="vyjimky/05.py" lang="python" />
    </example>

    <example>
        <text>
            Napište kód, který postupně smaže všechny prvky bajtového pole.
        </text>
        <hint>
            Metoda <em>pop()</em> na bajtovém poli z něj postupně odstraňuje (a zároveň i vrací) všechny jeho prvky (bez parametru vždy aktuální poslední). Jakmile již není dále co odstraňovat, vyhodí výjimku <em>IndexError</em>.
        </hint>
        <solution src="vyjimky/06a.py" lang="python" />
        <solution src="vyjimky/06b.py" lang="python" />
    </example>

    <example>
        <text>
            Napište kód, který v zadaném bajtovém poli smaže všechny výskyty daného bajtu.
        </text>
        <hint>
            Metoda <code>remove(PRVEK)</code> na bajtovém poli smaže první výskyt (zleva) zadaného prvku a pokud ho nenajde, vyhodí výjimku <em>ValueError</em>.
        </hint>
        <solution src="vyjimky/07.py" lang="python" />
    </example>


</examples>
