Začínáme programovat Lekce 3 Začínáme programovat Řetězce. C2184 Úvod do programování v Pythonu podzim 2015 Mgr. Stanislav Geidl C2184 Uved do programováni Řetězce Mgr. Stanislav Geidl Národní centrum pro výzkum biomolekul Masarykova univerzita 3.1 Char (znak) • libovolný znak na klávesnici i mimo ni 000 □ Ol Q 002 « 003 y 004 + 005 £ OOS * 007 ■ 008 □ 009 010 011 J1 012 * 013 014 J3 015 O (nul) (soli) (stx) (etx) (eot) (eng) (aclí) (bel) (ks) (tab) (If) (vt) (up) (CĽ ) ( SO ) (si) Regular 016 □ 17 018 □ 19 □ 20 02 1 □ 22 023 □ 24 □ 25 02 6 □ 27 028 □ 29 □ 30 03 1 ASCII dle) del) dc2) dc3) dc4) nak) syn) etb) can) em) eof) esc) fs) gs) rs) US) Chart 032 sp □ 33 ! 034 " □ 35 # □ 36 ? 037 % □ 38 £ 039 1 □ 40 ( □ 41 ) 042 * □ 43 + 044 , □ 45 - □ 46 . 047 / (character 048 0 □ 49 050 051 052 053 □ 54 055 056 8 057 9 058 : □ 59 ; 060 < 061 = 062 > 063 ? codes 0 064 a □ 65 A 066 E 067 C 068 D 069 E □ 70 F 071 G 072 H 073 074 □ 75 076 077 H 078 N 079 0 - 127) 080 P □ 81 Q 082 R □ 83 S □ 84 T 085 U □ 8 6 V 087 U □ 88 □ 89 090 □ 91 092 □ 93 ] □ 94 A 095 096 □ 97 098 099 100 101 102 103 104 105 106 107 108 109 m 110 n 111 o 112 p 113 q 114 Ľ 115 s 116 t 117 u 118 v 119 w 120 12 1 122 123 124 125 } 12 6 ~ 127 □ x y z { I Začínáme programovat Mgr. Stanislav Geidl c" C2184 Úvod d© programováni 128 g 129 Ü 130 131 132 133 134 135 13 6 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 L Extended ASCII Chart (character codes 128 - 255) Č 158 y 172 Č 18 6 1 200 IL 2 14 í 228 ň 242 É 159 Č 173 187 , 201 I 2 15 í 229 ň 243 Ĺ 160 á 174 « 188 ü 202 2 16 ě 230 Š 244 í 161 í 175 189 Ž 203 f 2 17 J 23 1 3 245 S ô 162 ó 176 190 i 204 I 2 18 r 232 Ŕ 246 Ť ö 163 ú 177 i 191 , 192 L 205 2 19 I 233 Ú 247 Ľ 164 K 178 1 206 JL ¥ 220 ■ 234 ŕ 248 o ľ 165 179 T 193 -1- 207 n 22 1 T 235 Ü 249 Š 166 ž 180 -| 194 -p 208 d 222 ů 23 6 ý 250 z 167 ž 181 Á 195 |- 209 D 223 ■ 237 Ý 251 Ü Ö 168 182 Ä 196 - 210 Ď 224 ó 238 t 252 Ř Ü 169 S 183 Ě 197 -f 211 E 225 ß 239 253 ŕ Ť 170 -i 184 198 Ä 212 ď 22 6 ô 240 - 254 ■ ť 171 z 185 ji íl 199 ä 213 Ň 227 Ň 241 255 • Python nemá speciální typ pro znak, použi 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 Začínáme programovat III. ~ Mgr. Stanislav Geidl 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 v Carriage return 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 C2184 Úvodí do programováni 1 zakončení řádku textového souboru záleží na OS 3.3 Řetězec Začínáme programovat Mgr. Stanislav Geidl 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") C2184 Uved do programováni 3.4 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:] Začínáme programovat III. " Mgr. Stanislav Geidl C2184 Úvod do programování 2v každém příkladu mohou byt uvozovky nahrazeny za apostrof 3.5 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] Začínáme programovat Mgr. Stanislav Geidl C2184 Uved do programováni 3.6 Vestavěné funkce pro práci s řetězci I. • hledání count stringl.count(string2) "Danny".count("n") vrací počet výskytu string2 ve stringl find stringl.find(string2) "Danny".find("n") vrací index prvního výskytu string2 ve stringl index stringl.index(string2) funguje stejně jako f ind, ale je určen pro kolekce • nahrazování a rozdělení replace string.replace(old, new) "Danny".replace("an" , "e") nahradí old za new v řetězci string split string.split(sep) "1 2 3".split(" ") vrací list řetězců, které vzniknou rozdělením string podle sep Začínáme programovat III. ~ Mgr. Stanislav Geidl C2184 Uved do programováni 3.7 Vestavěné funkce pro práci s řetězci II. • změna velikosti upper string.upper() "danny".upper() zvětší všechna písmena lower string.lower() "DANNY".lower() zmenší všechna písmena Začínáme programovat Mgr. Stanislav Geidl C2184 Uved do programováni title string.title() "danny je pes".title() zvětší první písmena slov 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 3.8 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 lstrip rstrip string.1strip () 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 Začínáme programovat III. * Mgr. Stanislav Geidl C2184 Úvod do programování v Pythonu 3.9 Logické operace Začínáme programovat III. ~ word = "Hello World" • word.isalnum() Mgr. Stanislav Geidl jsou všechny znaky čísla? • word.isalpha() jsou všechny znaky písmena? • word.isdigit() Úvod do programovaní v Pythony 02184 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 'ď? • word.startswith('H') začíná řetězec slova/znakem 'ď? H • opakování: operátory in, not in Formátování pomocí % "řetězec: o, 0 I! o o " 9- o I! o, 0 " 2- o s proměnna formátovací znaky: %c znak, %s řetězec, 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 Začínáme programovat III. " Mgr. Stanislav Geidl i celé číslo, %f C2184 s je %s." % ("Danny", "pes") s ma %i roku." % ("Danny", 3) s vazi %.lf kg." % ("Danny", 7.1) 3.11 Formátování pomocí .format() • "řetězec: {}".formát(proměnna) • nepovinné formátovací znaky: {:s}, {: f}, {: i}, ... • délka: {: x}, kde x je délka • desetinná část: {: . y}, kde y je počet desetinných míst • zarovnání: {: <12} {:~12} {:>12} • výhoda oproti %, je možnost označit značky čísly 0-9 nebo přímo pojmenovat • Příklady: "{}".formát("Danny") "{:f}".formát(10.3232) " { : 20}".formát("Danny") " { : .2f}".formát(10.3232) " { :>20}".formát("Danny") "{:10.2f}".formát(10.3232) "{} je {}.".formát("Danny", "pes") "{1} ma {0} roku.".formát(3, "Danny") "{} vazi {:.lf} kg.".formát("Danny", 7.174) "{0}, {0}, ke mně. Hodnej {0}".formát("Danny") "{j} je {r}.".format(j="Danny"r r="J. Russel") 3.12 Začíname programovat Mgr. Stanislav Geidl C2184 Úvod do programováni