Lekce 2 Začínáme programovat I. Základní konstrukce jazyka: základní datové typy, logické a matematické operátory, podmínky, cykly. Vstup a výstup. C2184 Úvod do programování v Pythonu podzim 2014 Začínáme programová I. Mgr. Stanislav Geidl C2184 Úvod do ipragrarrtDvámf v Pythonu Proměnné Základní datové typy Operátory Podmínky Cykly Vstupy a výstupy Domácí úkoly Mgr. Stanislav Geidl Národní centrum pro výzkum biomolekul Masarykova univerzita Proměnná (variable) • má svůj název (identifikátor, identifier) a odkazuje na místo v paměti, kde je uložena tzv hodnota (value) proměnné • propojení proměnné a její hodnoty provádíme pomocí přiřazení (assign) (=) a = i ukázka • Python je jazyk s dynamickou typovou kontrolou (do proměnné můžete uložit cokoliv, ale hodnoty si pamatují svůj typ) 10 + "a" ukázka • název proměnné se může skládat z malých (a velkých) písmen (bez diakritiky), čísel a podtržítka (_), nesmí začínat číslem, podtžítkem začínají speciální proměnné, název proměnné se nesmí shodovat s žádným z 34 klíčových slOV jazyka Python: and, as, assert, break, class, continue, def, del, elif, else, expect, finally, for, from, global, if, import, in, is, lambda, nonlocal, not, or, pass, raise, return, try, while, with, yield, True, False, None Začínáme programová Mgr. Stanislav Geidl C2184 Úvod do programováni v Pythonu Základní datové typy Operátory Podmínky Cykly Vstupy a výstupy Domácí úkoly Code style - názvy • b (jedno malé písmeno) • b (jedno velké písmeno) lowercase • lower_case_with_underscores • UPPERCASE • UPPER_CASE_WITH_UNDERSCORES • CapitalizedWords (nebo CapWords nebo CamelCase nebo StudlyCaps) mixedCase • Capitalized_Words_With_Underscores (hnusné!) Pro názvy lokálních proměnných budeme používat styl lowercase a lower_case_with_underscores. Speciální případ bude, když nám název proměnné bude kolidoval s klíčovým slovem např. ciass_. Začínáme programová I. Mgr. Stanislav Geidl C2184 Úvod dö ipragrarrtDvánf v Pythonu Základní datové typy Operátory Podmínky Cykly Vstupy a výstupy Domácí úkoly 2.3 Code style - přiřazen Správně: X = 1 y = 2 long_variable = Špatně: x=l y long_variable = Základní datové typy O boolean (booleovský typ) nabývá buď hodnoty Tme nebo False. © Čísla mohou být celá (integer; 1 a 2), reálná (float; 1.1 a 1.2) nebo komplexní (complex; 3+1j). © Řetězce (string) jsou posloupnosti Unicode znaků. Tuto podobu může mít napríklad html dokument. O Bajty (byte) a pole bajtů, například soubor s obrázkem ve formátu jpeg. © Seznamy (list) jsou uspořádané posloupnosti hodnot. © N-tice (tuple) jsou uspořádané, neměnné posloupnosti hodnot. © Množiny (set) jsou neuspořádané kolekce hodnot. © Slovníky (dictionary) jsou neuspořádané kolekce dvojic klíč-hodnota. Začínáme programová I. Mgr. Stanislav Geidl C2184 Qvod do programování v Pythonu Proměnné Základní datoví Operátory Podmínky Cykly Vstupy a výstupy Domácí úkoly 2.5 Odbočka: funkce a jejich použití • funkce je část programu (je podprogram, angl. subrouti která lze volat opakovaně z různých části programu, příkladem může být funkce printQ Code style - volání funkce Správně: # Volání funkce bez mezery spam(1) # Vertikální zarovnání na otvírací závorkou foo = long_function_name(var_one, var_two, var_three, var_four) # Parametry na dalším řádcích s vlastním # odsazením foo = long_function_name( var_one, var_two, var_three, var_four) Špatně: # Volání funkce s mezery spam (1) # Zákaz používat argumenty na prvním řádku, # pokud nepoužijeme vertikální zarovnání foo = long_function_name(var_one, var_two, var_three, var_four) Začínáme programová I. Mgr. Stanislav Geidl C2184 Qvod do programování v Pythonu Proměnné kladní datoví Operátory Podmínky Cykly Vstupy a výstupy Domácí úkoly Zjištění a změna typu funkce type() »> type (10) >>> type(1.5) >>> type(3+1j) >>> type(True) >>> type("test") >>> type(None) Začínáme programová I. Mgr. Stanislav Geidl C2184 Úvod do ppsgrarrKJvanf v Pythonu Proměnné kladní datoví Operátory Podmínky Cykly Vstupy a výstupy Domácí úkoly • změna pomocí funkce, která nese název podle typu, který bude výsledkem, např. int() Zjištění a změna typu • funkce type() • změna pomocí funkce, která nese název podle typu, který bude výsledkem, např. int() >>> int("10") 10 >» int("10a") ValueError: invalid literal for int() with base 10: '10a' >>> int(10.6) 10 >>> float (1) 1. 0 >>> bool(0) False >>> bool(1) True >>> bool(None) False >>> str(l) ' 1' Začínáme programová Mgr. Stanislav Geidl 02184 Úvod do programování v PyHhonu Operátory Podmínky Cykly Vstupy a výstupy Domácí úkoly Matematické operátory + sčítání (např. 10 + 3) - odčítání (např. 10-3) * násobení (např. 10*3) / dělení (např. 10/3) // celočíselné dělení (např. 10 // 3 —11) % modulo (zbytek po celočíselném dělení; např. 10 % 3 ** umocňování (např. 10 * *3) () závorky abs () funkce, která vrací absolutní hodnotu • pořadí operací jako v matematice • Co bude výsledkem 2 * *8 - (5 + 5) * 5 * 5 + 5? Začínáme programová I. Mgr. Stanislav Geidl C2184 Úvod úo programování v Pythonu - 77) Promjenné Základní datové typy Podmínky Cykly Vstupy a výstupy Domácí úkoly Speciální typy přiřazení:+= -= *= /= %= // a+=l#a=a+l Logické operátory and a or nebo not negace —— je rovno ! —, o není rovno > je větší < je menší >= je větší rovno <= je menší rovno is, is not je, není (např. i is into nebo a is not None) in, not in je v, není v (např. 'pes' not in 'Harapes' nebo'a' in 'test') • pořadí operací: matematické operace; < > <= >=; == !=; <>; is, is not; in, not in; not; and; or Začínáme programová I. Mgr. Stanislav Geidl C2184 Úvod do ipragrarrtDvánf v Pythonu Proměnné Základní datové typy Podmínky Cykly Vstupy a výstupy Domácí úkoly Code style - operátory Správně: i = i + 1 submitted += 1 x = x*2 - 1 hypot2 = x*x + y*y c = (a+b) * (a-b) Špatně: i=i + l submitted +=1 x = x * 2 - 1 hypot2 = x * x c = (a + b) * + y * (a - b) Začínáme programová Mgr. Stanislav Geidl C2184 Úvod dö ppsgrarrKJvánf v Pythonu Proměnné Základní datové typy Podmínky Cykly Vstupy a výstupy Domácí úkoly 2.12 Příklad - řešení kvadratické rovnice z^né™™,™™ Mgr. Stanislav Geidl Úvod do ipragrarrtDvánf v Pythonii Proměnné Základní datové typy Podmínky Cykly Vstupy a výstupy Domácí úkoly 2.13 Příklad - řešení kvadratické rovnice ax2 + bx + c — 0 D = b2 - Aac D = b**2 - 4*a*c -b±VĎ xl = (-b+math.sqrt(D)) / (2*a) x2 = (-b-math.sqrt(D)) / (2*a) Bloky • Bloky slouží k seskupení příkazů, například uvnitř cyklů, funkcí, objektů, struktur atd. • Například v Pascalu jsou bloky označeny slovy BEGIN a END a v jazyce C slouží pro vytváření bloků špičaté závorky . V Pythonu se pro vytváření bloků používá odsazování. • Nový blok vytvoříte tak, že napíšete na začátku řádků před příkazy, které spolu tvoří blok, libovolný počet mezer nebo tabulátorů. Ale před každým dalším příkazem v bloku musí být stejný počet mezer a tabulátorů! Odsadíte-li o mezeru více, nebo pokud místo tabulátoru použijete mezery, začnete tím jiný blok. Pokud vytvoříte nový blok na místě, kde nemá být, skončí program s chybou. prikaz1: blokl blokl prikaz2: blok2 blok2 prikaz3: blok3 prikaz 4: blok4 Začínáme programová Mgr. Stanislav Geidl C2184 Úvod do programováni v Pythonu Základní datové typy Operátory Cykly Vstupy a výstupy Domácí úkoly Podmínky Začínáme programová Mgr. Stanislav Geidl C2184 Úvod do ppsgrarrKJvánf v Pythonu Na základě vyhodnocení logického výrazu se rozhodne, jestli se daný blok provede nebo nikoliv. Proměnné Základní datové typy Operátory Cykly Vstupy a výstupy Domácí úkoly 2.16 Podmínka if Začínáme programová if ^podmínka ^: print("Podmínka splněna."; Mgr. Stanislav Geidl C2184 Úvod do ppsgrarrKJvánf v Pythonu if 9 > 5: print("Devět je větši než pět.") age = 20 is_man = True if age >= 18 and is_man: print("Plnoletý můž.") Proměnné Základní datové typy Operátory Cykly Vstupy a výstupy Domácí úkoly 2.17 Podmínka if.. else Začínáme programová if 'podmínka 1: print("Podmínka splněna.") else: print("Podmínka nesplněna.") if 9 < 5: print("Devět je menší než pět.") else: print("Devět není menší než pět.") Mgr. Stanislav Geidl C2184 Úvod de programováni v Pythonu Proměnné Základní datové typy Operátory Cykly Vstupy a výstupy Domácí úkoly age = 16 is_man = True if age >= 18 and is_man: print("Plnoletý můž.") else: print("Mladistvím a ženám nic neřeknu.") Podmínka if.. elif.. else if 'podmínka 1 and ,podminka21: else: nt ( "Podmi 'podmínka nt ( "Alesp nt ( "Podmi 20 n = False e > = 18 a nt ( "Plnol not is_ma nt ( "Ženo, else: print("Mladistvím nenalévám.") Začínáme programová I. Mgr. Stanislav Geidl C2184 Úvod do programováni v Pythonu Proměnné Základní datové typy Operátory Cykly Vstupy a výstupy Domáci úkoly Code style - podmínky Správně: if not users: print 'no users' if foo == 0: self.handle_zero() if i % 10 == 0: self.handle_multiple_of_ten(; Začínáme programová Mgr. Stanislav Geidl C2184 Úvod do programováni v Pythonu Proměnné Základní datové typy Operátory Špatně: if len(users) == 0: print 'no users' if foo is not None and not foo: self.handle_zero() if not i % 10: self.handle_multiple_of_ten(; Cykly Vstupy a výstupy Domácí úkoly Příklad - je číslo dělitelné třemi nebo pěti? ^^„^ Mgr. Stanislav Geidl Úvod do programováni v Pythonu Proměnné Základní datové typy Operátory Cykly Vstupy a výstupy Domácí úkoly 2.21 Příklad - je číslo dělitelné třemi nebo pěti? Začínáme programová Mgr. Stanislav Geidl cislo = 14 if cislo%3 == 0 and cislo%5 == 0: print("Číslo je dělitelné třemi i pěti.") elif cislo%3 == 0: print("Číslo je dělitelné třemi.") elif cislo%5 == 0: print("Číslo je dělitelné pěti.") else: print("Číslo není dělitelné třemi ani pěti.") C2184 Úvod de prcgramDvánf v Pythonu Proměnné Základní datové typy Operátory Cykly Vstupy a výstupy Domácí úkoly ukázka 2.22 Cykly Podobně jako podmínky se řídí logickým výrazem, který rozhoduje o spuštění příslušného bloku, tyto bloky mohou (většinou to i chceme :)) běžet i několikrát po sobě. Začínáme programová I. Mgr. Stanislav Geidl C2184 Úvod do programováni v Pythonu í. WíE TUK, ■for (c™nt ^ 1 i (aMTit < - Soo j f.«J nTtt) print f ("I 11 not ttrfaw pqpe r qirfiflt^ Vi clqís.") Proměnné Základní datové typy Operátory Podmínky Vstupy a výstupy Domácí úkoly Šetří nám čas s psaním kódu a ruce od používání Ctrl+C/V. 2.23 Cyklus while while 'podminka1 blok blok i = 0 while i < 10: print(i) i += 1 ukázka Cyklus for for i in . . . : blok blok for i in range(10) print(i) ukázka Začínáme programová Mgr. Stanislav Geidl C2184 Úvod do programováni v Pythonu Proměnné Základní datové typy Operátory Podmínky Vstupy a výstupy Domácí úkoly 2.25 Řízení běhu cyklu pomocí break a continue • break vynutí ukončení cyklu • continue vynutí ukončení vykonávání bloku a spust další smyčku for i in range (100) : if i%3 == 0: print ("<3") continue if i >= 10: break print(i) ukázka Řízení běhu cyklu pomocí break a else Začínáme programová Mgr. Stanislav Geidl • else pokud cyklus nebyl ukončen pomocí break spustí svůj blok for i in range(l,10): print(i) if i % 11 == 0: break else: print("Žádné čislo dělitelné 11 nenalezeno." C2184 Qvod do programování v Pythonu Proměnné Základní datové typy Operátory Podmínky Vstupy a výstupy Domácí úkoly ukázka 2.27 Příklad - výpočet odmocniny pomocí Newtonovy metody Začínáme programová I. Mgr. Stanislav Geidl Tato metoda hledá řešení rovnice f(x) = 0a odhaduje (zlepšuje odhad) na základě tohoto výpočtu: f{xguess) xbetterguess — xguess f/, ^ i (Xguess) (4) C2184 Úvod do prograrrKJvánf v Pythonu Proměnné Základní datové typy Operátory Podmínky tento výpočet je neustále iterován, dokud nejsme s výsledkem vstuPyavýStupy SpOkOJeni. Domáclúkoly 2.28 Příklad - výpočet odmocniny pomocí Newtonovy metody X — y/ä f (x) = x2-a=0 f'{x) = 2x _ x2 - a _ x + f xbetterguess — x ^ — 2 a = 9 x = 1.0 # initial guess while abs(x**2-a) > 0.000000001: x = (x+a/x) / 2 print(x) ukázka Vstupy a výstupy Vstup: • raw_input () v Pythonu 2.x nebo input v Pythonu 3 • argumenty programu (přes modul sys): import sys if len(sys.args) > 1: print sys.argv[l] • ze souboru Výstup: • print() • sys.stdoutasys.stderr • do souboru Začíname programová I. Mgr. Stanislav Geidl C2184 Qvod do programování v Pythonu Proměnné Základní datové typy Operátory Podmínky Cykly Domáci úkoly 2.30 Domácí úkoly O Stáhněte si ze studijních materiálů homework02A_tempiate.py a do vyznačené části (mezi ## začátek ## a ## konec ##)s použitím předdefinovaných proměnných (r, eO (=eo),■■■) dopište program pro řešení vybrané rovnice (vybíráte pouze jednu, 4 body). © Napište program, který na výstup vypíše prvních 15 prvků vybrané posloupnosti (vybíráte pouze jednu, 4 body). • První úkol do odevzdávárny nahrajte jako homework02A.py a druhý jako homework02B.py, vaše jméno a UČO se přidá automaticky. • Nevytvářejte složky v odevzdáváme prosím. • Nejpozději do 30. 9. 2014 včetně! Začínáme programová I. Mgr. Stanislav Geidl C2184 Qvod do programováni v Pythonu Proměnné Základní datové typy Operátory Podmínky Cykly Vstupy a výstupy 2.31