Lekce 3 Základy programování II. Pokročilé datové typy - řetězce a kolekce (tuple, seznamy slovníky). C2184 Úvod do programování v Pythonu podzim 2014 Základy programován II. Mgr. Stanislav Geidl C2184 Úvod do ipragrarrtDvámf v Pythonu Řetězce List (seznam) Tuple (N-tice) Dictionary (slovník) Vícerozměrné kolekce Mgr. Stanislav Geidl Národní centrum pro výzkum biomolekul Masarykova univerzita Char (znak) • libovolný znak na klávesnici i mimo ni Extended ASCII Chart i i 12 8 - 2 55) .2 8 g 143 C 149 Ľ 150 ľ 151 5 2 03 T 217 J 2 05 = 219 I 153 Ö 154 Ü 155 Ť 164 4 178 I 151 Á 152 i 153 Ě 154 5 196 - 197 -f 195 I 2 08 d 209 ľ 210 Ď 211 E 224 O 235 Základy programován II. Mgr. Stanislav Geidl C2184 Úrad dö ipragrarrtDvánf v Pythonu List (seznam) Tuple (N-tice) Dictionary (slovník) Vícerozměrné kolekce • Python nemá speciální typ pro znak, pouzí pro něj string, ale má pro ně vestavěné funkce • funkce chr () vrací znak pro zadanou ASCII hodnotu • funkce ord () vrací ASCII hodnotu pro zadaný znak Speciální znaky, escapovaní • používá backslash \ backslash notace význam \a zvonek nebo alert \b Backspace \cx Control-x \C-x Control-x \e Escape \f Formfeed \M-\C-x Meta-Control-x \n Newline1 \nnn kód znaku v osmičkové sou- stave, n = 0..7 \r Carriage return \s Space \t Tab \v Vertical tab \x Character x \xnn kód znaku v šestnáctkové sou- stave, n = 0..7,a..f/A..F zakončení řádku textového souboru záleží na OS Řetězec • je posloupnost znaků • Python rozpoznává řetězce ohraničené uvozovkami " a apostrofy ' řetězec = "ja jsem řetězec" • řetězce lze spojovat (řetězit) pomocí operátoru + "ahoj "+ "uživateli" • opakovat operátorem * "ahoj "* 10 • přistupovat ke konkrétnímu znaku pomocí indexu nebo podřetězci pomocí rozsahu indexů retezec[0] nebo řetězec [ 1:4] • na řetězce lze volat vestavěné funkce "ja jsem řetězec".find("ja") • můžeme zjišťovat délku řetězce len ("test") Tvorba a změna řetězce nový řetězec vytvoříme například přiřazením2 retezecl = 'Ja jsem veta.' retezec2 = "Ja jsem druha veta." retezec3 = r"Ja jsem druha veta.\n" retezec4 = "Ja jsem veliiiiiiice \ dlouhá veta." retezec5 = """Ja jsem veliiiiiiice dlouhá veta.""" změnu provedeme libovolným použitím operátoru, např. retezec6 = retezecl + ""+ retezec2 retezec7 = retezecl[:-1] + ", j"+ retezec2[1:] 2v každém příkladu mohou byt uvozovky nahrazeny za apostrof Přístup k hodnotám • můžeme přistupovat k jakémukoliv znaku pomocí jeho indexu string [x], kde kladná čísla od nuly n určují index zleva a záporná čísla určují index zprava "Danny"[0] "Danny"[1] "Danny"[-1] • přes dvojtečku můžeme nadefinovat rozsah string [x:y], kde tyto výrazy si odpovídají: string[:] == string string[x:] == string[x:len(string)+1] string[:y] == string[0:y] • pozor na číslovaní! v Pythonu začínáme od nuly! Danny 01234 • co bude výsledkem? "Danny" [1:4] "Danny" [2:] "Danny" [:2] "Danny" [2:2] "Danny" [-2:] "Danny" [:-2] Vestavěné funkce pro práci s řetězci I. • hledání count find stringl.count(string2 ) stringl.find(string2 ) "Danny".count("n" ) "Danny".find("n" ) vrací počet výskytu string2 ve vrací index prvního výskytu stringl string2 ve stringl index stringl.index(string2) funguje stejně jako find, ale je určen pro kolekce • nahrazování a rozdělení replace ,.. split string.replace(old, new) . . string.split(sep) "Danny".replace("an", ni 2 3„ lit(„ n) e, ' , , , „ .„ . vrací list řetězců, které vzniknou nahradí old za new v řetězci ... , ., rozdělením strmg podle sep string Vestavěné funkce pro práci s řetězci II. • změna velikosti upper string.upper() "danny".upper() zvětší všechna písmena title string.title() "danny je pes".title() zvětší první písmena slov lower string.lower() "DANNY".lower() zmenší všechna písmena capitalize string.capitalize() "danny je pes".capitalize() zvětší první písmeno řetězce swapcase string.swapcase() "Danny je Jack Russel".swapcase () zvětší první písmena slov Vestavěné funkce pro práci s řetězci III. • odstraňování "bílých znaků"(u, \t, \n, \r) na koncích strip string.strip() "\tdanny ".strip () odebere bílé znaky z obou konců řetězce 1strip rstrip string.lstrip() string.rstrip() "\tdanny ".lstrip () "\tdanny ".rstrip() odebere bílé znaky z levého konce odebere bílé znaky z pravého řetězce konce řetězce • spojování jinak join string.join(collection) ", ".join ( "abed") proloží kolekci řetězcem string Logické operace word = "Hello World" • word.isalnum() jsou všechny znaky čísla? • word.isalpha() jsou všechny znaky písmena? • word.isdigit() obsahuje řetězec čísla? • word.istitle() obsahuje řetězec titulky (slova s prvním velkým písmenem)? • word.isupper() obsahuje řetězec slova s velkými písmeny? • word.islower() obsahuje řetězec slova s malými písmeny? • word.isspace() obsahuje řetězec bílé znaky? • word.endswith(' ď) končí řetězec slova/znakem o"? • word.startswith('H') začíná řetězec slova/znakem 'ď? H • opakování: operátory in, not in Formátování pomocí % • "řetězec: %s" % proměnna • formátovací znaky: %c znak, %s řetězec, %i celé číslo, %f desetinné číslo • modifikátory: • - zarovnání doleva • n, kde n udává celkovou délku • . n, kde n udává počet desetinných míst • Příklady: "%s" % "Danny" "%f" % 10.3232 "%20s" % "Danny" "%.2f" % 10.3232 "%-20s" % "Danny" "%10.2f" % 10.3232 "%s je %s." % ("Danny", "pes") "%s ma %i roku." % ("Danny", 3) "%s vazi %.lf kg." % ("Danny", 7.1) Formátování pomocí .formatQ Základy programován Mgr. Stanislav Geidl C2184 Úvod dö ppsgrarrKJvánf v Pythonu • test List (seznam) Tuple (N-tice) Dictionary (slovník) Vícerozměrné kolekce 3.12 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í 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]] Práce se seznamy II. • mazání seznámí.remove (1) # [1, 2, 3, 5, 8, 13, 21] last = seznámí.pop()3 # last = 21; [1, 1, 2, 3, 5, 8, 13] • výběr pomocí [], stejně jako u řetězců seznámí[1] seznámí[1:5] seznámí[-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, 3list funguje jako zásobník, FIFO = first in, first out Práce se seznamy III. počítání seznámí = [1, 1, 2, 3, 5, 8, 13] len(seznámí) # 7 sum(seznaml) # 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) Tuple (N-tice) • vytváříme pomocí jednoduchých závorek o • 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]) 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 Práce se seznamy • vytvoření diet = {'Name': 'Zara', 'Age': 7, 'Class': 'First'} • čtení print(diet['Name']) # Zara • úprava hodnot diet['Age'] = 8 # úprava stávající hodnoty diet ['School'] = "DPS School"# přidání 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]) Vícerozměrné kolekce Základy programován II. Mgr. Stanislav Geidl C2184 Úvod do pragramDvánf v Pythonu • 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)] Řetězce List (seznam) Tuple (N-tice) Dictionary (slovník) něrné kolekce 3.20