Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
180 changes: 180 additions & 0 deletions materials/homework/def-str/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,180 @@
<h1>Domácí projekty</h1>
Nezapomeň: Když něco funguje, přidej to do Gitu!<br>
<em>Pokud materiály procházíš v jiném pořadí než my na srazech a Git ještě
neznáš, můžeš všechny poznámky o Gitu ignorovat. Jinak si na tuto sadu projektů
udělej zvláštní repozitář.</em>


<h2>Zapoj mozek</h2>
Trocha experimentování. Zkus se zamyslet, jestli jsi „dobře” pochopila otázku.
<ol start="0">
<li>Co se stane, když tělo nějaké funkce necháš prázdné?</li>
<li>Co se stane, když necháš prázdné tělo cyklu?</li>
</ol>


<h2>Různě velké domečky</h2>
Procvičení funkcí. Jestli jsi Pythoní funkce nepsala už před kurzem, tak první
z těchto projektů určitě udělej. Druhý jen pokud máš ráda geometrii. :)
<ol start="2">
<li>
Napiš funkci, která vykreslí domeček dané velikosti (t.j. velikost se
zadá argumentem).<br>
<img src="{{ static('tri-domy.png') }}" alt="Různě velké domečeky jedním tahem."><br>
<em>Funguje? Do Gitu s tím!</em>
</li>
<li>Máš-li ráda geometrii, můžeš zkusit dávat domečkové funkci dva
argumenty: šířku a výšku.
<em>Je potřeba si vzpomenout na Pythagorovu větu a funkci tangens.
Pozor, funkce <code>tan</code> vrací výsletek v radiánech; je potřeba
ho převést na stupně.</em><br>
<img src="{{ static('tri-domy2.png') }}" alt="Domečeky jedním tahem s různými proporcemi.">
</li>
</ol>


<h2>Procvičení programování</h2>
Často je jednoduché něco napsat, ale dotažení do konce může být časově náročné.
Nemáš-li čas, zkus se aspoň zamyslet jak bys projekt vyřešila.
<ol start="4">
<li>
Změň program Kámen, Nůžky, Papír tak, aby opakoval hru dokud uživatel
nezadá <code>"konec"</code>.
</li>
<li>
Změň funkci <code>ano_nebo_ne</code> tak, aby se místo
<code>"ano"</code> se dalo použít i <code>"a"</code>, místo
<code>"ne"</code> i <code>"n"</code> a aby se nebral ohled na velikost
písmen a mezery před/za odpovědí.<br>
<em>Textům jako <code>"možná"</code> nebo <code>"no tak určitě"</code>
by počítač dál neměl rozumět.</em>
</li>
</ol>


<h2>Programovací hrátky</h2>
Sada zajímavých (snad) prográmků, které bys teď měla být schopná napsat.
Nemáš-li čas, zatím je přeskoč.
<ol start="6">
<li>
Napiš program, který se zeptá na příjmení uživatelky/uživatele a zkusí
podle něj uhodnout její/jeho pohlaví.<br>
<em>Připomínám: Až to bude fungovat, dej to do Gitu!</em>
</li>
<li>
Najdi na Internetu text své oblíbené písně, zkopíruj si ho do řetězce
a zjisti, kolikrát je v něm použito písmeno K.<br>
<em>Připomínám: Až to bude fungovat, dej to do Gitu!</em>
</li>
<li>
Napiš program, který simuluje tuto hru:<br>
První hráč hází kostkou (t.j. vybírají se náhodná čísla od 1 do 6),
dokud nepadne šestka. Potom hází další hráč, dokud nepadne šestka i
jemu. Potom hází hráč třetí a nakonec čtvrtý. Vyhrává ten, kdo na
hození šestky potřeboval nejvíc hodů. (V případě shody vyhraje ten, kdo
házel dřív.)<br>
Program by měl vypisovat všechny hody a nakonec napsat, kdo vyhrál.<br>
<em>Připomínám: Až to bude fungovat, dej to do Gitu!</em>
</li>
</ol>


<h2>1D piškvorky</h2>
Nakonec trošku delší projekt. Budeme na něm stavět dál; nedokončíš-li ho teď,
budeš ho muset dodělat před příští sadou projektů. 1-D piškvorky se hrají
na řádku s dvaceti políčky.<br>
Hráči střídavě přidávají kolečka (<code>o</code>) a křížky (<code>x</code>),
třeba:<br>
1. kolo: <code>-------x------------</code><br>
2. kolo: <code>-------x--o---------</code><br>
3. kolo: <code>-------xx-o---------</code><br>
4. kolo: <code>-------xxoo---------</code><br>
5. kolo: <code>------xxxoo---------</code><br>
Hráč, která dá tři své symboly vedle sebe, vyhrál.
<ol start="9">
<li>
Napiš funkci <code>vyhodnot</code>, která dostane řetězec
s herním polem 1-D piškvorek
a vrátí jednoznakový řetězec podle stavu hry:
<ul>
<li>
<code>"x"</code> – Vyhrál hráč s křížky (pole obsahuje
<code>xxx</code>)
</li>
<li>
<code>"o"</code> – Vyhrál hráč s kolečky (pole obsahuje
<code>ooo</code>)
</li>
<li>
<code>"!"</code> – Remíza (pole neobsahuje <code>-</code>
a nikdo nevyhrál)
</li>
<li>
<code>"-"</code> – Ani jedna ze situací výše (t.j. hra ještě
neskončila)
</li>
</ul>
<em>Připomínám: Až to bude fungovat, dej to do Gitu!</em>
</li>
<li>
Napiš funkci <code>tah</code>, která dostane řetězec s herním polem,
číslo políčka (0-19) a symbol (<code>x</code> nebo <code>o</code>)
a vrátí herní pole <em>(t.j. řetězec)</em> s daným symbolem umístěným
na danou pozici. Hlavička funkce by tedy měla vypadat nějak takhle:
<pre>
def tah(pole, cislo_policka, symbol):
"Vrátí herní pole s daným symbolem umístěným na danou pozici"
...
</pre>
<em>Můžeš využít nějakou funkci, kterou jsme napsaly už na sraze?</em>
</li>
<li>Napiš funkci <code>tah_hrace</code>, která dostane řetězec s herním
polem, zeptá se hráče, na kterou pozici chce hrát, a vrátí herní pole
se zaznamenaným tahem hráče.<br>
Funkce by měla odmítnout záporná nebo příliš velká čísla a tahy na
obsazená políčka. Pokud uživatel zadá špatný vstup, funkce mu vynadá a
zeptá se znova.<br>
<em>Funguje? Do Gitu s tím!</em>
</li>
<li>
Napiš funkci <code>tah_pocitace</code>, která dostane řetězec s herním
polem, vybere pozici, na kterou hrát, a vrátí herní pole se
zaznamenaným tahem počítače. Použij jednoduchou náhodnou strategii:
<ol>
<li>Vyber číslo od 0 do 19.</li>
<li>Pokud je dané políčko volné, hrej na něj.</li>
<li>Pokud ne, opakuj od bodu 1.</li>
</ol>
Hlavička funkce by tedy měla vypadat nějak takhle:
<pre>
def tah_pocitace(pole):
"Vrátí herní pole se zaznamenaným tahem počítače"
...
</pre>
</li>
<li>
Napiš funkci <code>piskvorky1d</code>, která vytvoří řetězec s herním
polem a střídavě volá funkce <code>tah_hrace</code> a
<code>tah_pocitace</code>, dokud někdo nevyhraje nebo nedojde k remíze.
Nezapomeň kontrolovat stav hry po každém tahu.<br>
<em>Funguje? Do Gitu s tím!</em>
</li>
</ol>


<h2>Strategie k 1D piškvorkám</h2>
Poslední projekt je nepovinný, ale, jak to u podobných projektů bývá, můžeš
na něj dostat zpětnou vazbu. Doporučuju toho využít!
<ol start="14">
<li>
Zvládneš pro počítač naprogramovat lepší strategii? Třeba aby se snažil
hrát vedle svých existujících symbolů nebo aby bránil protihráčovi?
Stačí jen docela malé vylepšení!<br>
<em>A i docela malé vylepšení patří do Gitu!</em><br>
Podle toho, jak jste se na sraze domluvili, pošli řešení e-mailem
(např. organizátorům, koučovi, nebo vůbec). Posílej ho jako přílohu,
nekopíruj ho do textu e-mailu.<br>
Jestli procházíš kurz sama a můžeš programování konzultovat s někým
zkušenějším, je tento úkol na takovou konzultaci ideální téma.
</li>
</ol>
4 changes: 4 additions & 0 deletions materials/homework/def-str/info.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
title: Domácí projekty
style: html
attribution: Pro PyLadies Brno napsal Petr Viktorin, 2014-2017.
license: cc-by-sa-40
Binary file added materials/homework/def-str/static/tri-domy.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added materials/homework/def-str/static/tri-domy2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
44 changes: 44 additions & 0 deletions materials/homework/dict/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
<h1>Domácí projekty</h1>


<h2>Procvičení slovníků</h2>
Těchto pár úkolů slouží k procvičení práce se slovníky, které se následně
pokusíš využít při programování známé skautské hry.

<ol start="0">
<li>
Napiš funkci, která pro zadané číslo n vytvoří a vrátí slovník, kde
jako klíče budou čísla od jedné do n a jako hodnoty k nim jejich druhé
mocniny.
</li>
<li>
Napiš funkci, která sečte a vypíše sumu všech klíčů a sumu všech hodnot
ve slovníku, který dostane jako argument. K vyzkoušení můžeš použít
slovník z minulé úlohy.
</li>
<li>
Napiš funkci, která jako argument dostane řetězec a vrátí slovník, ve
kterém budou jako klíče jednotlivé znaky ze zadaného řetězce a jako
hodnoty počty výskytů těchto znaků v řetězci.
</li>
<li>
Napiš funkci, která vypíše obsah slovníku (klíče a k nim náležící
hodnoty) na jednotlivé řádky.
</li>
</ol>


<h2>Kdo? S kým? Co dělali?</h2>
A teď už ke slíbené hře.

<ol start="4">
<li>
Úkolem je vytvořit známou skautskou hru „Kdo? S kým? Co dělali?“. Hra
se hráče zeptá postupně na různé otázky, například „Kdo?“, „S kým?“,
„Co dělali?“, „Kde?“, „Kdy?“ a nakonec „Proč?“, s tím, že mu umožní na
jednu otázku odpovědět vícekrát a všechny odpovědi si uloží. Na závěr
pak hra z každé sady odpovědí vybere náhodně jednu odpověď a z takto
vybraných odpovědí složí větu, kterou vypíše uživateli. Seznam otázek
by mělo být možné změnit na jednom místě bez zásahu do logiky programu.
</li>
</ol>
4 changes: 4 additions & 0 deletions materials/homework/dict/info.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
title: Slovníky - domácí projekty
style: html
attribution: Pro PyLadies Brno napsal Petr Viktorin, 2014-2017.
license: cc-by-sa-40
63 changes: 63 additions & 0 deletions materials/homework/file/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
<h1>Domácí projekty</h1>


<h2>Rozsypaný čaj</h2>
Dnešní projekty jsou tak trochu navíc. Udělej je, pokud už máš hotové 1D piškvorky.

<ol start="0">
<li>
Napiš program, který zkoupíruje soubor na jiné místo. (Zeptá se na
původní jméno a nové jméno, načte původní soubor a zapíše obsah do
nového.)<br>
<em>Program zkoušej v adresáři, který neobsahuje nic důležitého – pro
Python není těžké přepsat soubor, ve kterém jsou důležité informace!</em>
</li>
<li>
Můj bratr, který píše japonské texty, mě požádal o program, který
počítá znaky. Program přečte soubor <code>rozsypanycaj.txt</code>
a zjistí, kolik znaků je psáno kterou z japonských slabikových abeced:
<ul>
<li>
ひらがな (hiragana):<br>
ぁ あ ぃ い ぅ う ぇ え ぉ お か が き ぎ く
ぐ け げ こ ご さ ざ し じ す ず せ ぜ そ ぞ た
だ ち ぢ っ つ づ て で と ど な に ぬ ね の は
ば ぱ ひ び ぴ ふ ぶ ぷ へ べ ぺ ほ ぼ ぽ ま み
む め も ゃ や ゅ ゆ ょ よ ら り る れ ろ ゎ わ
ゐ ゑ を ん ゔ
</li>
<li>
カタカナ (katakana):<br>
ァ ア ィ イ ゥ ウ ェ エ ォ オ カ ガ キ ギ ク
グ ケ ゲ コ ゴ サ ザ シ ジ ス ズ セ ゼ ソ ゾ タ
ダ チ ヂ ッ ツ ヅ テ デ ト ド ナ ニ ヌ ネ ノ ハ
バ パ ヒ ビ ピ フ ブ プ ヘ ベ ペ ホ ボ ポ マ ミ
ム メ モ ャ ヤ ュ ユ ョ ヨ ラ リ ル レ ロ ヮ ワ
ヰ ヱ ヲ ン ヴ ヵ ヶ ヷ ヸ ヹ ヺ
</li>
</ul>

Program vypíše dvě čísla – počet znaků pro každou z abeced. Znaky,
které nejsou ani v jedné z abeced, ignoruj.

Pro testování si jako <code>rozsypanycaj.txt</code> můžeš uložit stránku
<a href="http://ja.wikipedia.org/wiki/%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%81%AE%E8%A1%A8%E8%A8%98%E4%BD%93%E7%B3%BB">http://ja.wikipedia.org/wiki/日本語の表記体系</a>.
</li>
</ol>


<h2>Rozšíření šibenice</h2>
Další projekt je rozšíření Šibenice z minulé sady. Jestli ji ještě nemáš
hotovou, vrať se nejdřív zpět.

<ol start="2">
<li>
Načítej „obrázky” v Šibenici ze souborů, místo řetězců ve zdrojovém
kódu. Až bude Šibenice fungovat, nasdílej ji na GitHub.<br>
Vlevo nahoře na <a href="http://github.com/">github.com</a> je v menu
„+”, kterým můžeš vytvořit nový repozitář. Po vytvoření se ukážou dvě
sady instrukcí: jedny pro úplně nový projekt, jedny pro nahrání už
existujícího repozitáře (<code>git remote add</code>
a <code>git push</code>). Použij ty druhé.
</li>
</ol>
4 changes: 4 additions & 0 deletions materials/homework/file/info.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
title: Domácí projekty
style: html
attribution: Pro PyLadies Brno napsal Petr Viktorin, 2014-2017.
license: cc-by-sa-40
Loading