Úvod do programování Úvod do programování Mar n Podloucký Mar n Podloucký
Co je to programování?
Co je to programování? Způsob, jak říct počítači, co má dělat?
Programování je řešení problémů Počítač je připraven za nás řešit spoustu náročných problémů Musíme mu ale sdělit postup řešení, sám počítač ho nevymyslí
Problém: spolubydlení Libor Zuzka? Petr Pavla Ondra Míša
Tabulka výdajů Jméno Petr Ondra Pavla Zuzka Pavla Libor Petr Míša Ondra Míša Zuzka Petr Ondra Věc Prací prášek Savo Toaleťák Mýdlo Závěs do koupelny Pivka na kolaudačku Mýdlo Zuzka 50 kč Pytle na odpadky Utěrky na nádobí Toaleťák Pečící papír Savo Tapeta na záchod Toaleťák Částka 240 kč 80 kč 65 kč 50 kč 350 kč 124 kč 75 kč 130 kč 120 kč 30 kč 80 kč 315 kč 64 kč
Tož kouknu a vidím, né? Text Text Číslo
Recept na řešení 01 02 03 SPOČÍTEJ KOLIK KAŽDÝ ČLEN UTRATIL CELKEM SPOČÍTEJ PRŮMERNOU ÚTRATU NA JEDNOHO ČLENA SPOČÍTEJ ROZDÍLY JEDNOTLIVÝCH ČLENŮ PROTI PRŮMĚRU 04 VŠECHNY PENÍZE TĚCH, KTEŘÍ ZAPLATILI PODPRŮMĚR, DEJ DO BANKU 05 BANK ROZDĚL MEZI TY, KTEŘÍ ZAPLATILI NAD PRŮMĚR Pro počítač je ale takový popis pořád strašlivě složitý.
Programovací jazyk
Kdo je to programátor? Chlap? Vysokoškolák? Matema k? Mladík? Bledá mastná ježatá příšera, která právě vylézá ze sousedovic sklepení?
Kdo je to počítač? Člověk, který počítá. Vážně!
Kdo je to počítač? Stroj, který počítá. Ale až od 40-tých let.
Co je to počítač? Jenom strašně rychlá kalulačka. Vážně! Všechny ty obrazovky, klávesnice, harddisky, reproduktory jsou jenom externí zařízení. Člověk: 1 op/sec? Stroj kdysi: 5 000 op/sec Stroj dnes: 5 000 000 000 op/sec
Vaše první zakázka
Divadlo Pěst na oko Naše umění vás zasáhne
Výpočet ceny vstupného Cena podle věku Základní cena vstupenky je 12 euro. Výsledný cena vstupenky činí 0 euro pro návštěvníky mladší 6 let, 65% ze základní ceny pro návštěvníky 6 až 26 let (žák, student), 100% ze základní ceny pro návštěvníky 27 až 64 let (dospělý), 50% ze základní ceny pro ostatní (senior).
Co budeme potřebovat? K programování nám stačí dva nástroje: Samotný jazyk Python h p://www.python.org Visual Studio Code h p://code.visualstudio.com/
První povídání s počítačem Počítač je kalkulačka, tak pojďme něco spočítat. >>> 1 + 1 2 >>> 3 * 4 12 >>> 3 / 4 0.75! Pozor, dese nná čísla se píšou s tečkou, nikoliv s čárkou.
Aritme cké operátory Máme i některé zajímavé, které ještě neznáte. + * Sčítání Odčítání Násobení 17 + 5 = 22 17-5 = 12 17 * 5 = 85 ** Mocnění 17 ** 5 = 1419857 / // % Dělení Celočíselné dělení Zbytek po dělení 17 / 5 = 3.4 17 // 5 = 3 17 % 5 = 2
Hodnoty 0 celé číslo int 1 celé číslo int 27 celé číslo int 3.14 dese nné číslo float -5 celé číslo int 0.0001 dese nné číslo float
Hodnoty Tyhle všechny už známe TYP NÁZEV PŘÍKLAD int float celé číslo dese nné číslo 1, 27, -5,... 3.14, 0.5,...
Řetězce Chcete další hodnoty? Tady je máte! "5" řetězec str "ahoj" řetězec str 'Martin' řetězec str "3.14" řetězec str
Hodnoty Tyhle všechny už známe TYP NÁZEV PŘÍKLAD int float str celé číslo dese nné číslo textový řetězec 1, 27, -5,... 3.14, 0.5,... "ahoj", '12',...
Čas na cvičení http://kodim.cz/uvod-do-progr
Proměnné >>> x = 7 >>> korun = 7 >>> dnivtydnu = 7 Proměnné jsou jako šuplíky, do kterých si můžeme schovat nějakou hodnotu pro pozdější použi.
Jména proměnných Začínají malým písmenem PocetHodin Nesmí obsahovat diakri ku počethodin Nesmí obsahovat mezery pocet hodin Velbloudí notace Nechť jméno proměnné pocethodin pcthdn dává vždy smysl!! Naučte se pojmenovávat proměnné anglicky numberofhours
Čas na cvičení
Funkce Funkce je malý kousek programu, který pro nás udělá nějakou užitečnou činnost. Funkce je něco jako topinkovač. Dáme do něj chleba (vstup) a vypadne nám topinka (výstup).
Volání funkce Spuštění topinkovače... 3.14 round( ) dese nné číslo float jméno funkce vstup funkce 3.0 dese nné číslo float výstup (výsledek)
Šikovné funkce Funkce, které se nám budou hodit v celém kurzu round() print() input() str() int() float() len() exit() Zaokrouhlování Tiskne na obrazovku Vstup od uživatele Převod na řetězec Převod řetězce na celé číslo Převod řetězce na deset. číslo Délka sekvence Konec programu
Moduly Moduly jsou balíčky užitečných funkcí math random statistics sys Matema cké funkce Náhodná čísla Sta s ka Práce se systémem A spousta spousta dalších...
Práce s moduly Každý modul je nejdříve potřeba importovat >>> import math Poté můžeme volat funkce z modulu pomocí tečkové notace >>> math.floor(3.95) 3 >>> math.ceil(3.15) 4
Užiteční funkce v modulech math.floor() Zaokrouhlování dolů math.ceil() Zaokrouhlování nahoru random.randint() Náhodné celé číslo v zadaném rozmezí random.uniform() Náhodné dese nné číslo v zadaném rozmezí
Čas na cvičení
První prográmky
Co je to program? Obyčejný textový soubor, který obsahuje příkazy pro Python 1 2 3 a = float(input('první strana: ')) b = float(input('druhá strana: ')) c = float(input('třetí strana: ')) 4 5 6 7 s = (a + b + c) / 2 obsah = (s*(s-a)*(s-b)*(s-c)) ** 0.5 print('obsah trojúhelníka je ' + str(obsah)) Můžeme použít vše, co jsme do teď psali do konzole!
Spuštění programu Do terminálu napsat: python mujprogram.py
Výstup do konzole Výstup provádíme, chceme-li uživateli něco sdělit nebo jej o něco požádat print("volební kalkulačka")...... print("vydržte, probíhá výpočet")......
Načítání vstupu V programech je důležité umět načíst vstup od uživatele. print("zadejte rok narození") roknarozeni = input() Tyto příkazy můžeme spojit do jednoho roknarozeni = input("zadejte rok narození")
Pozor na typy! Řetězce nejsou čísla 2 + 3 = 5 '2' + '3' = '23' 2 + '3' =
Konverze hodnot POZOR! Funkce input() ale vrací vždycky řetězec! roknarozeni = "1986" my ale potřebujeme číslo. roknarozeni = int(input()) Podobně, pokud chceme číslo jako součást řetězce, musíme ho na řetězec převést print("narozen " + str(roknarozeni))
Komentáře Komentáře jsou vysvětlivky pro toho, kdo bude náš kód číst. # Jednořádkový komentář začíná mřížkou """ Pokud chceme vysvětlit něco obsáhleji na víc řádcích, uzavřeme text do trojitých uvozovek """ Jazyk Python komentáře zcela ignoruje, jsou zde jen pro nás.
Čas na cvičení
Podmínky
Podmínky Umožňují programu se rozhodnout 18+
Podmínky Umožňují programu se rozhodnout _ ne ano Vrať se za pár let! Oh yeah baby!!
Pravdivostní hodnoty Už zase nový typ hodnot True pravdivostní hodnota bool False pravdivostní hodnota bool Naštěs jsou pouze dvě možnos
Hodnoty Tyhle všechny už známe TYP NÁZEV PŘÍKLAD int float str bool celé číslo dese nné číslo textový řetězec pravdivostní hodnota 1, 27, -5,... 3.14, 0.5,... "ahoj", '12',... True, False
Porovnávací operátory Ty právě potřebujeme k rozhodování v podmínkách ==!= > >= < <= Rovnost Nerovnost Větší než Větší nebo rovno Menší než Menší nebo rovno
Příkaz if... else... Rozhodnu podle pravdivostní hodntoy if vek >= 18: print("oh yeah baby!!") else: print("vrať se za pár let!")
Bloky Pozor na správné odsazení if podmínka: příkaz příkaz if jiná podmínka: příkaz příkaz příkaz
Podmínky s více větvemi Známka podle počtu bodů z písemky body < 50 True False znamka = 'F' body < 60 True False znamka = 'E' body < 70 True False znamka = 'D' A tak dále...
Podmínky s více větvemi Jak to napsat v Pythonu? if body < 50: znamka = 'F' elif body < 60: znamka = 'E' elif body < 70: znamka = 'D' elif body < 80: znamka = 'C' elif body < 90: znamka = 'B' else: znamka = 'A'
Čas na cvičení
Sekvenční hodnoty
Hodnoty Tyhle všechny už známe TYP NÁZEV PŘÍKLAD int float str bool celé číslo dese nné číslo textový řetězec pravdivostní hodnota 1, 27, -5,... 3.14, 0.5,... "ahoj", '12',... True, False A teď to rozjedem!
Řetězec je sekvenční hodnota Je to sekvence jednotlivých znaků 'martin' 0 1 2 3 4 5 >>> jmeno = 'martin' >>> jmeno[0] 'm' >>> jmeno[5] 'n'
Operátor in Zjišťuje, zda sekvence obsahuje daný prvek >>> 'm' in 'martin' True >>> 'p' in 'martin' False >>> 'p' not in 'martin' True
Porovnávací operátory Přibyly nám dva nové ==!= > >= < <= in not in Rovnost Nerovnost Větší než Větší nebo rovno Menší než Menší nebo rovno Patří do Nepatří do
Seznamy Nová sekvenční hodnota je tady! Seznamte se. [1, 2, 3] seznam list ['a', 'b', 'b', 'd'] seznam list [-5, 3.14, 'ahoj', True] seznam list
Co se dá dělat se seznamy Všechno co s běžnými hodnotami a ještě spousta věcí navíc. Kolik jsem naběhal kilometrů? ubehnuto = [5, 6, 2, 0, 10, 5, 5] Pozor na číslování položek, vždy začíná od nuly!!! >>> ubehnuto[0] >>> ubehnuto[1] >>> ubehnuto[7]
Seznam může obsahovat cokoliv Do seznamu můžete vložit jakékoliv hodnoty. seznam = [15, 3.14, 'Jana', True] Seznam je také hodnota, takže není problém udělat seznam seznamů. ubehnuto = [[11, 2, 3, 0, 0, 4, 5], [10, 6, 0, 4, 0, 2, 3], [15, 7, 0, 0, 0, 0, 6]] >>> ubehnuto[1][4]
Hodnoty Tyhle všechny už známe TYP NÁZEV PŘÍKLAD int float str bool list celé číslo dese nné číslo textový řetězec pravdivostní hodnota seznam 1, 27, -5,... 3.14, 0.5,... "ahoj", '12',... True, False [1, 3.14, 'ahoj']
Čas na cvičení
Cyklus
Cyklus for Slouží k procházení sekvencí for znak in 'martin': print(znak) for cislo in [2, 3, 5, 7, 11]: print(cislo)
Co lze dělat s cykly Seznam známek z písemky znamky = [ ['Petr', 2], ['Roman', 1], ['Jitka', 3], ['Zuzana', 5], ['Ondřej', 2], ['Julie', 2], ['Karel', 4], ['Anna', 1], ['Eva', 1] ]
Co lze dělat s cykly Průměrná známka soucet = 0 for radek in znamky: soucet = soucet + radek[1] prumer = soucet / len(znamky) Podobně bychom například spočetli průměrnou útratu na člověka v našem úvodním příkladu se spolubydlením.
Tabulka výdajů jako seznam Jméno Věc Částka vydaje = [ Petr Ondra Pavla Zuzka Pavla Libor Petr Míša Ondra Míša Zuzka Petr Ondra Prací prášek Savo Toaleťák Mýdlo Závěs do koupelny Pivka na kolaudačku Pytle na odpadky Utěrky na nádobí Toaleťák Pečící papír Savo Tapeta na záchod Toaleťák 240 kč 80 kč 65 kč 50 kč 350 kč 124 kč 75 kč 130 kč 120 kč 30 kč 80 kč 315 kč 64 kč ] ['Petr', 'Prací prášek', 240], ['Ondra', 'Savo', 80], ['Pavla', 'Toaleťák', 65], ['Zuzka', 'Mýdlo', 50], ['Pavla', 'Závěs do koupelny', 350], ['Libor', 'Pivka na kolaudačku', 124], ['Petr', 'Pytle na odpadky', 75], ['Míša', 'Utěrky na nádobí', 130], ['Ondra', 'Toaleťák', 120], ['Míša', 'Pečící papír', 30], ['Zuzka', 'Savo', 80], ['Petr', 'Tapeta na záchod', 315], ['Ondra', 'Toaleťák', 64]
Program pro finanční narovnání import statistics seznamjmen = [] utraty = [] for vydaj in vydaje: jmeno = vydaj[0] utrata = vydaj[2] if jmeno in seznamjmen: index = seznamjmen.index(jmeno) utraty[index] += utrata else: seznamjmen.append(jmeno) utraty.append(utrata) prumernautrata = statistics.mean(utraty) for index, utrata in enumerate(utraty): vyrovnani = round(utrata - prumernautrata) if vyrovnani > 0: print(seznamjmen[index] + ' dostane\t' + str(vyrovnani)) else: print(seznamjmen[index] + ' má dáti\t' + str(-vyrovnani))
Závěr
Kam dál? Jak se dále vzdělávat v programování Dlouhodobé kurzy Czechitas Kurzy programování od pyladies.cz Jejich stránky obsahují též mnoho online materiálů Stránky české komunity python.cz mají rosáhlou sekci se zdroji pro začátečníky YouTube video tutoriály freecodecamp.org: Learn Python - Full Course for Beginners www.codecademy.com/learn/learn-python Velmi kvalitní kurz jdoucí krok po kroku
Čas jít na pivo