Začínáme programovat Lekce 2 Začínáme programovat Logické operátory, podmínky, cykly. Kolekce - seznamy, N-tice a slovníky. Vstup a výstup. C2184 Úvod do programování v Pythonu podzim 2015 Mgr. Stanislav Geidl C2184 Uved do programováni Logické operátory Bloky Podmínky Cykly List (seznam) Tuple (N-tice) Dictionary (slovník) Vícerozměrné kolekce Vstupy a výstupy Code style Mgr. Stanislav Geidl Národní centrum pro výzkum biomolekul Masarykova univerzita 2.1 Logické operátory and or not l O > < >= <= is, is not in, not in a nebo negace je rovno není rovno je větší je menší je větší rovno je menší rovno je, není (např. i is int() nebo a is not None) 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 programovat Mgr. Stanislav Geidl C2184 Úvod do programování ické operátory Bloky Podmínky Cykly List (seznam) Tuple (N-tice) Dictionary (slovník) Vícerozměrné kolekce Vstupy a výstupy Code style 2.2 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 programovat Mgr. Stanislav Geidl C2184 Uved do programováni Logické operátory Podmínky Cykly List (seznam) Tuple (N-tice) Dictionary (slovník) Vícerozměrné kolekce Vstupy a výstupy Code style 2.3 Podmínky Na základě vyhodnocení logického výrazu se rozhodne, jestli se daný blok provede nebo nikoliv. Začínáme programovat Mgr. Stanislav Geidl C2184 Úvodí do programováni Logické operátory Bloky Cykly List (seznam) Tuple (N-tice) Dictionary (slovník) Vícerozměrné kolekce Vstupy a výstupy Code style 2.4 Podmínka if if ^podmínka ^: if 9 > 5: print("Devět je větši než pět.") x = 5 if x >= 2 and x < 10: print("Proměnná náleží do intervalu <2;10)") Začínáme programovat II. Mgr. Stanislav Geidl C2184 print (" Podmínka Splněna.") Úvod do programování Logické operátory Bloky Cykly List (seznam) Tuple (N-tice) Dictionary (slovník) Vícerozměrné kolekce Vstupy a výstupy Code style 2.5 Podmínka if.. else if ^podmínka ^: 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.") x = 13 if x >= 2 and x < 10: print("Proměnná náleží do intervalu <2;10)") else: print("Proměnná nenáleží do intervalu <2;10)") Začínáme programovat II. Mgr. Stanislav Geidl C2184 Uved do programováni v Pythonu Logické operátory Bloky Cykly List (seznam) Tuple (N-tice) Dictionary (slovník) Vícerozměrné kolekce Vstupy a výstupy Code style 2.6 Podmínka if.. elif.. else if ^podmínka^ and >podminka2*: print("Podmínka splněna.") elif >podminka2 *: print("Alespoň podmínka2 splněna.") else: print("Podmínky nesplněny.") x = 11 if x >= 2 and x < 10: print("Proměnná náleží do intervalu <2;10)") elif x >= 5 and x < 15: print("Proměnná náleží do intervalu <5;15)") else: print("Proměnná x mimo povolený rozsah!") Kdyby x bylo rovno 8, který blok by se provedl? Začínáme programovat II. Mgr. Stanislav Geidl C2184 Úvod do programování v Pythonu Logické operátory Bloky Cykly List (seznam) Tuple (N-tice) Dictionary (slovník) Vícerozměrné kolekce Vstupy a výstupy Code style 2.7 Příklad - je číslo dělitelné třemi nebo pěti? Začínáme programovat II. Mgr. Stanislav Geidl C2184 Úvodí do programováni Logické operátory Bloky Cykly List (seznam) Tuple (N-tice) Dictionary (slovník) Vícerozměrné kolekce Vstupy a výstupy Code style 2.8 Příklad - je číslo dělitelné třemi nebo pěti? 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 Začínáme programovat II. Mgr. Stanislav Geidl C2184 Uved do programováni v Pythonu Logické operátory Bloky Cykly List (seznam) Tuple (N-tice) Dictionary (slovník) li ^ Vícerozměrné kolekce Vstupy a výstupy Code style 2.9 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ě. prtirŕtf ("I vfiil not Thrůw p^ptr qí^K*ťí tiqís.')} 1 Šetří nám čas s psaním kódu a ruce od používání Ctrl+C/V. Začínáme programovat II. Mgr. Stanislav Geidl C2184 Úvod d© programováni v Pythonu Logické operátory Bloky Podmínky List (seznam) Tuple (N-tice) Dictionary (slovník) Vícerozměrné kolekce Vstupy a výstupy Code style 2.10 Cyklus while while ^podminka^: blok blok i = 0 while i < 10: print (i) i += 1 Začínáme programovat II. Mgr. Stanislav Geidl C21S4 Úvod do programování v Pythonu Logické operátory Bloky Podmínky List (seznam) Tuple (N-tice) Dictionary (slovník) Vícerozměrné kolekce Vstupy a výstupy Code style 2.11 Cyklus for for i in blok Začínáme programovat II. ' Mgr. Stanislav Geidl C2184 Úvod d© programování Logické operátory Bloky blok Podmínky Cykly for i in range (10) : ust(seznam) print (i) Tuple (N-tice) Dictionary (slovník) Vícerozměrné kolekce Vstupy a výstupy Code style 2.12 Ří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) Začínáme programovat II. Mgr. Stanislav Geidl C2184 Úvod d© programováni v Pythonu Logické operátory Bloky Podmínky List (seznam) Tuple (N-tice) Dictionary (slovník) Vícerozměrné kolekce Vstupy a výstupy Code style 2.13 Řízení behu cyklu pomocí break a else eise pokud cyklus nebyl ukončen pomocí break spustí svůj blok Začínáme programovat Mgr. Stanislav Geidl C2184 Úvod d© programováni Logické operátory Bloky Podmínky for i in range(1,10): print(i) if i % 11 == 0: break else: "V print ("Žádné čislo dělitelné 11 nenalezeno.") vícerozměrné kolekce Vstupy a výstupy Code style List (seznam) Tuple (N-tice) Dictionary (slovník) 2.14 Příklad - výpočet odmocniny pomocí Newtonovy metody Tato metoda hledá řešení rovnice f(x) = 0 a odhaduje (zlepšuje odhad) na základě tohoto výpočtu: _ f{Xguess) ,u Xbetterguess — ^guess ~ 7777; r U ' \Xguess) tento výpočet je neustále iterován, dokud nejsme s výsledkem spokojeni. Začínáme programovat II. Mgr. Stanislav Geidl C2184 Úvod do programováni v Pythonu Logické operátory Bloky Podmínky List (seznam) Tuple (N-tice) Dictionary (slovník) Vícerozměrné kolekce Vstupy a výstupy Code style 2.15 Příklad - výpočet odmocniny pomocí Newtonovy metody x = V a (2) f(x) = x2 - a = 0 (3) ť(x) = 2x (4) -y *2~a X+§ ,n Xbetterguess ~ * ^ — 2 a = 9 x = 1.0 # initial guess while abs(x**2-a) > 0.000000001: x = (x+a/x) / 2 print (x) Začínáme programovat II. Mgr. Stanislav Geidl C2184 Úvod do programovaní v Pythonu Logické operátory Bloky Podmínky List (seznam) Tuple (N-tice) Dictionary (slovník) Vícerozměrné kolekce Vstupy a výstupy Code style 2.16 List (seznam) • patří do kolecí, podobně jako N-tice a slovník • vytváříme pomocí hranatých závorek [ ] ["a", "b", "c", "d"] • každý prvek má svůj automatický index, který odpovídá pořadí Začínáme programovat II. Mgr. Stanislav Geidl C2184 Úvod do programování v Pythonu Logické operátory Bloky Podmínky Cykly Tuple (N-tice) Dictionary (slovník) Vícerozměrné kolekce Vstupy a výstupy Code style 2.17 Práce se seznamy I. • vytvoření seznámí = [1, 1, 2, 3, 5, 8, 13] seznam2 = list(seznámí) seznam3 = seznámí[:] seznam4 = seznámí # nejedna se o novy list, pouze odkaz na starý!!! seznam5 = range(2,20,2) # [2, 4, 6, 8, 10, 12, 14, 16, 18] • přidáváme prvky seznámí.append(21) # [1, 1, 2, 3, 5, 8, 13, 21] seznam2.insert(2, 90) # [1, 1, 90, 2, 3, 5, 8, 13] seznam3.extend([21, 34]) # [1, 1, 90, 2, 3, 5, 8, 13, 21, 34] seznam3.append([21, 34]) # [1, 1, 2, 3, 5, 8, 13, [21, 34]] Začínáme programovat Mgr. Stanislav Geidl C2184 Úvod d© programováni Logické operátory Bloky Podmínky Cykly List (seznam) Tuple (N-tice) Dictionary (slovník) Vícerozměrné kolekce Vstupy a výstupy Code style 2.18 Práce se seznamy II. - přístup k hodnotám • můžeme přistupovat k jakémukoliv prvku pomocí jeho indexu seznam [x], kde nula a kladné číslo n určuje index zleva a záporné číslo určuje index zprava [1, 2, 3, 4, 5] [0] # 1 [1, 2, 3, 4, 5] [1] # 2 [1, 2, 3, 4, 5] [-1] # 5 • přes dvojtečku můžeme nadefinovat rozsah seznam [x: y ], kde tyto výrazy si odpovídají: [1, 2, 3, 4, 5] [:] # [1, 2, 3, 4, 5] [1, 2, 3, 4, 5] [2:] # [3, 4, 5] [1, 2, 3, 4, 5] [:2] # [1, 2] • pozor na číslovaní! v Pythonu začínáme od nuly! [1, 2, 3, 4, 5] 0 . 1. 2 . 3 . 4 . • co bude výsledkem? seznam = [1, 2, 4, 5, 6] x[l:4] x[2:] x[:2] x[2:2] x[-2:] x[:-2] Začínáme programovat Mgr. Stanislav Geidl C2184 Úvod d© programováni Logické operátory Bloky Podmínky Cykly List (seznam) Tuple (N-tice) Dictionary (slovník) Vícerozměrné kolekce Vstupy a výstupy Code style 2.19 3, 5, 8, 13] Práce se seznamy III. seznámí = [1, 1, 2, 3, 5, 8, 13] • mazání seznámí.remove(1) # [1, 2, 3, 5, 8, 13, 21] last = seznámí.pop() 1 # last = 21; [1, 1, 2, • přehození směru seznámí.reverse() # [13, 8, 5, 3, 2, 1, 1] • vyhledávání seznámí.index(5) # 4 seznámí.count(1) # 2 • seřazení seznam = [1, 4, 3, 6, 2, 5] seznam.sort() # [1, 2, 3, 4, 5, 6] seznam.sort(reverse=True) # [6, 5, Začínáme programovat II. Mgr. Stanislav Geidl G2184 Úvod do programování Logické operátory Bloky Podmínky Cykly Tuple (N-tice) Dictionary (slovník) Vícerozměrné kolekce Vstupy a výstupy Code style list funguje jako zásobník, FIFO = first in, first out 2.20 Práce se seznamy IV. počítání seznam! = [1, 1 2 3 len(seznámí) # 7 sum(seznámí) # 33 min(seznámí) # 1 max(seznámí) # 13 procházení for item in [1, 2, 3] : print(item) for item in range(1,4) print(item) 5, 8, 13] Začínáme programovat II. Mgr. Stanislav Geidl C2184 Úvod d© programováni v Pythonu Logické operátory Bloky Podmínky Cykly Tuple (N-tice) Dictionary (slovník) Vícerozměrné kolekce Vstupy a výstupy Code style 2.21 Tuple (N-tice) • vytváříme pomocí jednoduchých závorek () • můžeme s nimi pracovat podobně jako se seznamy, jenom je nemůžeme měnit, tzn. že funkce append a další nejsou dostupné • můžeme jednoduše převádět na list pomocí list((1,2)) a podobně zpět tupie ([1,2]) Začínáme programovat II. Mgr. Stanislav Geidl G2184 Úvod do programování v Pythonu Logické operátory Bloky Podmínky Cykly List (seznam) Dictionary (slovník) Vícerozměrné kolekce Vstupy a výstupy Code style 2.22 Dictionary (slovník) vytváříme pomocí složených závorek {} {1: 3, 2: 4} prvek ve slovníku se skládá z klíče a jeho hodnoty, 1 a 2 jsou klíče, jejich hodnoty jsou 3, resp. 4 nefungují zde indexy, na hodnoty se dotazujeme pomocí klíče každý klíč je unikátní, žádný slovník nemůže obsahovat dva stejné klíče Začínáme programovat Mgr. Stanislav Geidl C2184 Úvod do programováni Logické operátory Bloky Podmínky Cykly List (seznam) Tuple (N-tice) íary (slovní Vícerozměrné kolekce Vstupy a výstupy Code style 2.23 Práce se slovníky • vytvoření diet = {'Name': ' Zara', 'Age': 7, 'Class': 'First'} • čtení/získání print(diet['Name']) # Zara • přidání nebo úprava hodnot diet['Age'] = 8 # úprava stávající hodnoty diet['School'] = "DPS School"# přidáni nové • smazání hodnot del diet['Name'] diet.clear () # smaže všechny položky del diet # smaže celý slovník • procházení hodnot for key in diet: print(key) print(diet[key]) Začínáme programovat Mgr. Stanislav Geidl C2184 Úvod d© programováni Logické operátory Bloky Podmínky Cykly List (seznam) Tuple (N-tice) íary (slovní Vícerozměrné kolekce Vstupy a výstupy Code style 2.24 Vícerozměrné kolekce • kolekce můžeme kombinovat a vytvářet list listů, ... [[1, 2], [2, 3], [4, 5]] • můžeme kombinovat i navzájem a vytvářet list N-tic, ... [(1, 2), (2, 3), (4, 5)] Začínáme programovat II. Mgr. Stanislav Geidl C2184 Úvod do programováni v Pythonu Logické operátory Bloky Podmínky Cykly List (seznam) Tuple (N-tice) Dictionary (slovník) Vícerozměrné kolekce Vstupy a výstupy Code style 2.25 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čínáme programovat II. Mgr. Stanislav Geidl C2184 Uved do programováni v Pythonu Logické operátory Bloky Podmínky Cykly List (seznam) Tuple (N-tice) Dictionary (slovník) Vícerozměrné kolekce Code style 2.26 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() Špatně: if len (users) == 0: print 'no users' Začínáme programovat Mgr. Stanislav Geidl C2184 Úvod do programováni Logické operátory Bloky Podmínky Cykly List (seznam) Tuple (N-tice) Dictionary (slovník) Vícerozměrné kolekce Vstupy a výstupy if foo is not None and not foo self.handle_zero() if not i % 10: self.handle_multiple_of_ten() 2.27