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] Seznámení

Kdo jsme a proč tu jsme

XXX

Proč Python?

XXX

[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

Program v souboru

print('Ahoj, světe!')
print('Ahoj, světe!')
print(tady je chyba)

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.

Den 3

Práce na projektech

Dodělejte projekt. Nebudete-li vědět jak dál, koučové vám rádi poradí!

Doplňující témata

Dle zájmu a zaměření projektů můžeme vysvětlit pokročilejší techniky, které pro dokončení jednotlivých projektů jdou použít.

Nasazení

Webové stránky bude potřeba pustit do světa.