﻿<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xml" href="/cjs/examples.screen.xsl" media="screen"?>
<examples chapter="Slovníky" directory="typy/slovniky">

    <note>
        Autorem původního zadání i řešení pro Python 2.x u příkladů 1, 4 a 6-8 je Bedřich Košata.
    </note>

<!--
  <example>
    <text>
    </text>
    <hint>
    </hint>
    <solution src="typy/slovniky/.py" lang="python" />
  </example>
-->


  <example no="13-1">
    <text>
        Zanalyzujte vstupní textový soubor následujícím způsobem: Vytvořte slovník, jehož klíči budou jednotlivá písmena a hodnotami počet jejich výskytů v textu. Uvedený slovník vypište pomocí <code>pprint.pprint()</code>.
    </text>
    <solution src="typy/slovniky/count_letters.1.py" lang="python" />
  </example>

  <example>
    <text>
        Rozšiřte předchozí program tak, že hodnotou bude objekt o dvou prvcích – prvním bude počet výskytů daného písmene v textu, druhým jeho relativní četnost v % (vzhledem k počtu všech písmen v textu).
    </text>
    <!--hint>
        Daným objektem nemůže být (alespoň hned od začátku) n-tice, protože pak bychom nemohli postupně upravovat její hodnoty, což je přesně to, co zde musíme dělat. Doporučuji použít např. seznam. Nebo slovník ^_^
    </hint-->
    <solution src="typy/slovniky/count_letters.2.py" lang="python" />
  </example>

  <example>
    <text>
        Upravte předchozí program tak, aby nerozlišoval mezi malými a velkými písmeny.
    </text>
    <solution src="typy/slovniky/count_letters.3.py" lang="python" />
  </example>

  <example no="13-2">
    <text>
        Obměňte první program tak, aby ukládal počet výskytů nikoli písmen, ale slov.
    </text>
    <hint>
        Dejte si pozor na to, že např. <em>ahoj</em> a <em>ahoj!</em> by mělo být to samé slovo. Zřejmě se to tedy bude chtít nějak zbavit interpunkce a dalších věcí. S výhodou můžete použít konstantu <em>string.punctuation</em> .
    </hint>
    <solution src="typy/slovniky/count_words.1.py" lang="python" />
  </example>

  <example>
    <text>
        Rozšiřte předchozí program tak, že hodnotou bude n-tice o dvou prvcích – prvním bude počet výskytů daného slova v textu, druhým jeho relativní četnost v % (vzhledem k počtu všech slov v textu).
    </text>
    <solution src="typy/slovniky/count_words.2.py" lang="python" />
  </example>

  <example no="13-3">
    <text>
        Napište funkci, která spojí dohromady dva slovníky.<br/>
        Ukázka: <code>{"a": 1, "b": 2, "c": 3}, {"d": 7, "e": 8} => {"a": 1, "b": 2, "c": 3, "d": 7, "e": 8}</code>
    </text>
    <solution src="typy/slovniky/01a.py" lang="python" />
    <solution src="typy/slovniky/01b.py" lang="python" />
    <solution src="typy/slovniky/01c.py" lang="python" />
  </example>

  <example no="15-1">
    <text>
        Napište funkci, která bude „obracet“ slovník. Bude brát slovník jako jediný argument a vrátí nový slovník, ve kterém budou hodnoty ze vstupního slovníku převedeny na klíče a klíče na hodnoty.<br/>
        Ukázka: <code>{1: 'A', 2: 'B'} => {'A': 1, 'B': 2}</code>
    </text>
    <solution src="typy/slovniky/02.py" lang="python" />
  </example>

  <example no="15-2">
    <text>
        Upravte předchozí program tak, aby bral v potaz skutečnost, že hodnoty nemusí být unikátní. Pro každou hodnotu tedy bude vytvářet seznam původních klíčů.<br/>
        Ukázka: <code>{1: 'A', 2: 'B', 3: 'B', 4: 'A', 5: 'C'} => {'A': [1,4], 'B': [2,3], 'C': [5]}</code>
    </text>
    <solution src="typy/slovniky/03.py" lang="python" />
  </example>

  <!--example>
    <text>
    </text>
    <solution src="typy/slovniky/.py" lang="python" />
  </example-->


</examples>
