Intenzivní kurz Pythonu¶
V dubnu rozjíždí Czechitas a Pyvec intenzivní kurz Pythonu. Tři soboty, od 10:00 do 18:00 (se) budeme učit programování – od úplných začátků až po hotový projekt. A potom se sejdeme na Pyvu, a projekty představíme veřejnosti!
Na těchto stránkách vzniká rozvrh a obsah kurzu. Detaily ještě nejsou všude vyplněné, to budu dělat postupně :)
Jestli něco není jasné z osnovy, dej vědět, abych tomu mohl nastavil prioritu :)
Informace pro kouče¶
Jdeš koučovat? Děkujeme! Tady je pár rad, jak na to.
Čas¶
Začínáme v deset, ale předtím ještě musíme rozdělit účastnice do skupinek, a případně dořešit organizační problémy, tak prosím buď na místě už v 9:30.
Skončíme v šest. Přetahovat neplánujeme, ale radši počítej s tím, že se na cestu domů vydáš v 18:30.
Formát¶
První a druhou sobotu bude „hlavní kouč” vysvětlovat a zadávat úkoly. Ostatní koučové se budou věnovat svým skupinkám účastnic, odpovídat na otázky, nebo napovídat když nebudou vědět jak dál.
Třetí sobotu už bude program individuální: každá skupinka bude pracovat na svém projektu, pod vedením „svého” kouče. Hlavní kouč bude k dispozici, kdyby si ostatní koučové nevěděli rady.
Co s sebou¶
Vezmi si s sebou laptop. Nejspíš nebude potřeba, ale je dobré ho mít.
Jako koučovat¶
Poznámka
Většina rad je převzata z OpenTechSchool Coaching Guide.
Usmívej se :)¶
Když se účastnice zeptá na něco, co už mělo být jasné, znamená to, že my, koučové, jsme to špatně vysvětlili. Zkus to napravit a vysvětli to znovu.
Když účastnice udělá popáté tu stejnou chybu, zhluboka se nadechni a znovu vysvětli problém – nejlépe podrobněji než předtím.
Nesahej na klávesnici¶
Klávesnice účastnic jsou z lávy. Jakmile se dotkneš klávesnice, ztrácíš jeden život.
Je jasné, že umíš problém vyřešit rychleji – ale když ho vyřešíš sám, ztrácí to smysl. Jakmile se dotkneš klávesnice, účastnice přestane dávat pozor. Nech ji aby aspoň napsala, co jí nadiktuješ.
Když opravdu musíš něco napsat na její klávesnici, napřed se zeptej jestli je to v pohodě. A nezapomeň vysvětlit co děláš.
Chceš říct něco víc?¶
Dostaneš-li doplňující otázku, zkontroluj si, jestli máš čas na ni odpovědět. Intenzivní kurz některé detaily schválně vynechává, aby se všechno stihlo.
Když má účastnice vyřešenou aktuální úlohu a nic nového se nepřednáší, klidně vysvětluj, ale kdyby hrozilo že přestanete stíhat, shrň odpověď do co nejmenšího času.
A neříkej jim o věcech, které nejsou v materiálech, dokud několikrát za sebou neuvidíš, že by jim ulehčily život. Příliš detailů, zkratek a zlepšováků může začátečníky zahltit.
Buď dobrý kouč¶
Základní předpoklad: každá účastnice má nulové znalosti ale nekonečnou inteligenci.
Občas se zeptej, jestli všechno funguje a jestli je všechno jasné.
Když se něco povede, nešetři chválou!
Na chytré otázky je radost odpovídat; dej tuto radost najevo. Hloupé otázky neexistují.
Když je něco špatně v materiálech, ohlaš chybu. Nebo pošli pull request. Jestli na to nemáš čas hned, zapiš si to.
Den 1¶
[30min] Kontrola instalace¶
Python¶
python --version
, případně python3 --version
,
musí ukázat Python 3.4
nebo Python 3.5
.
Editor¶
Textový editor musí být nastavený tak, aby odsazoval o 4 mezery a ukazoval čísla řádků.
Git¶
git --version
musí fungovat.
Účet na GitHubu¶
Účet musí být založený.
[2h 30m] Základy programování v Pytohnu 1¶
Řetězce a print()
¶
XXX: Vede Nasťa, viz její notebook
Typy objektů¶
XXX: Čísla, řetězce, bool
, seznamy, slovníky; převádění typů; operace
Proměnné¶
XXX: Vede Nasťa, viz její notebook
Řetězce¶
XXX: Vede Nasťa, viz její notebook
Slovníky¶
XXX: Vede Nasťa
[1h] Oběd¶
Ňam ňam!
[2h 30m] Základy programování v Pytohnu 2¶
Podmínky: if
¶
strana = float(input("Zadej stranu čtverce: "))
if strana < 0:
print("Záporné čtverce neexistují")
elif strana == 0:
print("Čtverec je prázdný")
else:
print("Takový čtverec má obsah:", strana * strana)
cislo = int(input("Zadej číslo: "))
if cislo % 2 == 0:
print('Číslo je sudé.')
else:
print('Číslo je liché.')
if cislo % 5 == 0:
print('Číslo je dělitelné pěti.')
else:
print('Číslo není dělitelné pěti.')
cislo = float(input("Zadej číslo: "))
if cislo == int(cislo):
if cislo % 2 == 0:
print('Číslo je sudé.')
else:
print('Číslo je liché.')
else:
print('Číslo není celé!')
- Zkus napsat program, který se zeptá na dvě otázky:
- Jsi šťastná?
- Jsi bohatá?
- a podle odpovědí odvětí:
- šťastná i bohatá – Gratuluji!
- jen bohatá – Zkus se víc usmívat!
- jen šťastná – Zkus míň utrácet!
- ani jedno – To je mi líto...
Cykly: for
a while
¶
for jmeno in 'Jana', 'Anna', 'Petra':
print('Přichází', jmeno + '!')
print(jmeno, 'zase odchází.')
for cislo in range(10):
if cislo % 2 == 0:
print('Číslo', cislo, 'je sudé.')
else:
print('Číslo', cislo, 'je liché.')
odpoved = input('Řekni Ááá! ')
while odpoved != 'Ááá':
print('Špatně, zkus to znovu!')
odpoved = input('Řekni Ááá! ')
print('Hotovo, ani to nebolelo!')
while True:
print('počkej, než se počítač unaví...')
soucet = 0
for cislo in 2, 945, 24, 3:
soucet = soucet + cislo
print(soucet)
Zkus napsat program, který sčítá čísla, která zadá uživatel. Když uživatel zadá nulu, program skončí.
Ramena obrů: import
¶
from random import randrange
print('Házím kostkou...')
vysledek = randrange(6) + 1
print('Výsledek je', vysledek)
Zkus napsat program, který náhodně vybere a vypíše “kámen”, “nůžky”, nebo “papír”.
Funkce: def
¶
def pozdrav():
print('Ahoj!')
pozdrav()
def pozdrav(jmeno):
print('Ahoj,', jmeno + '!')
pozdrav('Lucko')
pozdrav('Aničko')
pozdrav('Terko')
def obsah_ctverce(strana):
return strana * strana
vysledek = obsah_ctverce(4)
print(vysledek)
def ano_nebo_ne(otazka):
while True:
odpoved = input(otazka + ' (ano/ne) ')
if odpoved == 'ano':
return True
elif odpoved == 'ne':
return False
else:
print('Nerozumím, zkus to znovu.')
stastna = ano_nebo_ne('Jsi šťastná?')
bohata = ano_nebo_ne('Jsi bohatá?')
Zkus napsat funkci def napis_hlasku(nazev, skore)
, která
např. po zavolání napis_hlasku('Tvoje', 256)
vypíše:
Tvoje skóre je 256 Skvělé!
ale po zavolání napis_hlasku('Protivníkovo', 5)
vypíše:
Protivníkovo skóre je 5 Aspoň něco...
Hlášky můžou být třeba:
- 1000 a víc: Světový rekord!
- 100 a víc: Skvělé!
- 10 a víc: Ujde to.
- jinak: Aspoň něco...
Čtení souborů: with
¶
with open('basnicka.txt') as soubor:
obsah = soubor.read()
print(obsah)
with open('basnicka.txt') as soubor:
for radek in soubor:
print(radek.rstrip())
Zkus napsat program, který přečte nějaký soubor, všechna písmenka převede na velká, a výsledek vypíše.
Procvičení¶
Napiš hru Oko bere:
- Začínáš s 0 body.
- Počítač v každém kole vypíše kolik máš bodů,
a zeptá se, jestli chceš pokračovat.
- Pokud ne, hra končí.
- Pokud ano, počítač „otočí kartu“ (náhodně vybere číslo od 2 do 10), a přičte její hodnotu k bodům.
- Pokud máš víc než 21 bodů, prohráváš.
- Cílem hry je získat co nejvíc bodů, ideálně 21.
[30min] Zadání projektu¶
Zadání domácího úkolu¶
Vymyslete téma projektu! Při vymýšlení komunikujte s koučem. Řekne vám co jde jednoduše, a na co by byla potřeba víc času.
Varianta 1: Webová aplikace¶
Naučíme se vytvářet webové stránky, a ptát se jejich návštěvníků na různé informace, které pak na stránkách můžeme zobrazit.
Příklady:
- Plánování akce (kdy má nejvíc lidí zároveň čas?)
- Blog nebo portfolio
- Jednoduchá webová hra (pexeso, textovka)
Nedoporučujeme web, který by nutně od začátku potřeboval registraci uživatelů (ta se případně dá dopsat po kurzu).
Taky nedoporučujeme stránky založené na animacích: aby se cokoliv změnilo, uživatel bude muset zmáčknout odkaz nebo tlačítko, a načte se nová stránka.
Varianta 2: Hra¶
Naučíme se kreslit animované obrázky a reagovat na klávesnici a myš, což je ideální na interaktivní hry.
Příklady:
- Had
- Pong
- Šachy, dáma, atd.
- Asteroids
- Skákačka (Mario)
Nedoporučujeme hru založenou na 3D grafice, efektech, nebo zvuku.
Bude-li tvá hra potřebovat scénář nebo mapu, do příště je vymysli. Budeš-li do hry potřebovat obrázky, do příště si nějaké sežeň. (Pokud stahuješ z Internetu, zkontroluj jestli máš právo obrázky použít ve své hře. Vhodné obrázky se dají najít na OpenGameArt, příklady: 1, 2, 3.)
Varianta 3: Nástroj pro příkazovou řádku¶
Taky se naučíme jak psát programy pro příkazovou řádku – nejjednodušší způsob, jak nechat počítač za nás něco udělat nebo vypočítat.
Tenhle typ projektu by se měl zaměřit buď na automatizaci nějaké nudné činnosti, kterou na počítači často děláš, nebo na analýzu informací.
Příklady:
- Hromadné přejmenování fotek, automatické zařazení do adresářů
- Analýza textu – počet písmen/slov, seznam nejčastějších slov, srovnání počtu teček/čárek/vykřičníků/otazníků, vyhledávání...
- Obdobná analýza tweetů z Twitteru
- Zpracování informací z tabulky exportované z Excelu nebo Google Docs
- Analýza obrázku – Je obrázek spíš modrý, nebo spíš červený? Který ze dvou obrázků je kontrastnější?
Tenhle druh projektu je hodně flexibilní, doporučujeme každý nápad konzultovat s koučem :)
[30min] Poděkování a rozloučení¶
XXX
Den 2¶
Na začátku druhého dne doplníme znalosti Python u třídy
[1h] Třídy¶
XXX: Dopsat (viz kurz pro PyLadies)
Chování vs. stav¶
XXX
Vlastní třídy¶
XXX
Atributy¶
XXX
self
¶
XXX
__init__
¶
XXX
Jak to využít v praxi¶
XXX
[2h] Git¶
Co to je Git¶
XXX
Začínáme: git clone
¶
XXX
Zjištění stavu: git status
¶
XXX
Přidávání souborů: git add
¶
XXX
Vytvoření revize: git commit
¶
XXX
Přehled revizí: git log
a gitk
¶
XXX
Nahrání změn: git remote
a git push
¶
Stažení změn: git pull
¶
XXX
Konflikty a jak je řešit¶
XXX
Shrnutí¶
XXX
[30min] Oběd¶
[1h] Jak na webovou aplikaci¶
Instalace frameworku flask
¶
XXX
Jak funguje Internet¶
XXX
Dotaz a odpověď ve Flasku¶
XXX
Základy HTML¶
XXX
Základy CSS¶
XXX
Formuláře a HTTP metody: GET, POST a PUT¶
XXX
Jak si uložit stav¶
XXX
Něco o bezpečnosti¶
XXX
[1h] Jak na hru¶
Instalace knihovny pyglet
¶
XXX
Smyčka událostí¶
XXX
Kreslení obrázků¶
XXX
Rotace¶
XXX
Vstup a reakce na něj¶
XXX
Základy herní fyziky¶
XXX
Výkon programu¶
XXX
[30min] Jak na program pro příkazovou řádku¶
Instalace knihovny click
¶
XXX
Druhy programů pro příkazovou řádku¶
XXX
Konvence příkazové řádky¶
XXX
Jak na to s Clickem¶
XXX
[1h 30m] Další témata – podle vybraných projektů¶
(?) Dědičnost tříd¶
XXX
(?) Stahování informací z Webu: requests
¶
XXX
(?) Webové API: json
¶
XXX
(?) Práce s textem: regex
¶
XXX
(?) Práce s tabulkovými daty: csv
¶
XXX
(?) Základy numerických výpočtů: numpy
, scipy
, matplotlib
¶
XXX
(?) ...¶
[30min] Zadání domácího úkolu; práce na projektu¶
- Úkol:
- Dokončit projekt
- Připravit prezentaci
Následuje individuální nebo skupinová konzultace s koučem.