SPJA, cvičení 1 ipython, python, skripty základy syntaxe: základní datové typy, řetězce podmínky: if-elif-else, vyhodnocení logických výrazů cykly: for, while kolekce: seznam, n-tice, slovník funkce, list comprehension
ipython, python, vytvoření skriptu Interaktivní mód: ipython: Applications > Accessories > Terminal v terminálu: python: ipython Applications > Accessories > Terminal v terminálu: python Vytvoření skriptu: editor gedit: nový soubor, uložit jako my_script.py
ipython, python, vytvoření skriptu Spuštění skriptu: ipython: spusťte ipython v terminálu v ipythonu: %run my_script.py python: v terminálu: python my_script.py argument1, argument2,...
syntax - typy python je dynamicky typovaný jazyk typ nemá proměnná, ale hodnota na kterou ukazuje. vytvoření proměnné: přiřazením hodnoty do proměnné >>> x = 3.14 # proměnná x má hodnotu 3.14 typu float >>> x # vypíše proměnnou x 3.14 >>> x = "Hello" # proměnná x má hodnotu "Hello" typu string >>> x 'Hello' zjištění typu proměnné: funkce type(x). (více o typu proměnné viz porovnání typů) >>> x = 3 ; type(x) <type 'int'>
syntax - typy základní typy: číselné - int, float, complex: >>> x=3 # integer >>> x=3.0 # float >>> x=3.0+0.0j # complex řetězec - str: v dvojitých/jednoduchých uvozovkách, uvozovky v uvozovkách: >>> x="hello world" ; y='hello world' ; x == y True >>> x="i said 'no penguins'" ; y='i said \'no penguins\'' ; x==y True >>> x="i said \"no penguins\"" ; y='i said "no penguins"' ; x==y True unicode, raw >>> x=u"string with unicode characters" >>> x=r"raw string treats \n escape sequences differently" ; x 'raw string treats \\n escape sequences differently'
syntax - typy kolekce: seznam (list): >>> x = [1,2,3] >>> x [1,2,3] n-tice (tuple): >>> x = (1,2,3) >>> x (1,2,4) slovník (dict): >>> x = { "a" : 1, "b" : 2 } >>> x { 'a' : 1, 'b' : 2 }
výstup, formátovaný výstup výpis hodnoty proměnné: >>> x = 3.14 ; print x 3.14 >>> print "pi =", x pi = 3.14 >>> print "pi = " + x pi = 3.14 formátovaný výpis: >>> x = 3.1415 ; print "pi = %.2f" % x pi = 3.14 >>> print "%s = %d" % ( "x", 4 ) x = 4
výstup, formátovaný výstup >>> print "{0} = {1}".format( "x", 4 ) x = 4 >>> print "{name} = {value}".format( name="x", value=4 ) x = 4
řídící struktury if-elif-else : if <podmínka> : <blok> elif <podmínka> : <blok> elif <podmínka> : <blok>... else: <blok> >>> x = 4 >>> if x == 4:... print "x je čtyři"... x += 1... x je čtyři >>> if x == 5:... print "x je teď 5"... elif x == 4:... print "x je stále čtyři"... else:... print "něco úplně jiného" x je teď 5
řídící struktury Blok příkazů: definován odsazením. Standardně se používají čtyři mezery pro jednu úroveň odsazení (jeden tabelátor, počet mezer lze nastavit v nastavení editoru) Příkazy na jedné úrovni odsazení tvoří jeden blok, dokud není úroveň odsazení snížena Příkazy s větším odsazením tvoří vnořený blok >>> x = 4; y = 3 >>> if x == 4:... x += 1... if y == 3:... y += 1... >>> print x,y 5 4 blok vnořený blok ekvivalent v C: int x = 4, y = 3; if ( x == 4 ) { x += 1; if ( y == 3 ) { y += 1; } }
řídící struktury while cyklus s podmínkou na začátku >>> n = 10 >>> while n >= 0:... print 'ahoj'... n -= 1 for : podobný foreach cyklu z jiných jazyků. Pro všechny prvky v kolekci proveď blok příkazů >>> s = 0 >>> for x in [1,2,3]:... s += x... >>> print s 6
řídící struktury funkce enumerate() "očísluje" prvky kolekce: >>> for i,x in enumerate(["a","b","c"]):... print i,x... 0 a 1 b 2 c funkce range(): range(do), range(od, do), range(od,do,krok) >>> for x in range(3):... print x... 0 1 2 >>> for x in range(1,6,2):... print x... 1 3 5
vyhodnocení logických výrazů, None None: proměnná "bez hodnoty": >>> x = None >>> x # žádný výstup se nezobrazí >>> print x None False, True: booleovské hodnoty. následující výrazy se vyhodnotí v podmínce jako nepravda: False, 0, None, [], (), {} (singleton False, číselná nula, None, prázdný seznam, n-tice, slovník) pravda: True, nenulová hodnota, neprázdné kolekce
identita a porovnání Operátory porovnání: <, >, <=, <=, ==, is, is not >>> if x is not None:... print "x není prázdné"... x není prázdné Logické spojky: and, or, not >>> if not (( a == b ) or ( a == c )):... print 'a není rovno b ani c'... a není rovno b ani c Je prvek v kolekci?: in, not in >>> print 'a' in [ 'a', 'b', 'c' ] True >>> print 'd' in ( 'a', 'b', 'c' ) False >>> print 'key1' in { 'key1' : 'value1', 'key2' : 'value2' } True
Sekvence, řetězce, kolekce Kolekce: seznam, n-tice, slovník Sekvence: seznam (list), n-tice (tuple), řetězec (string, str) (sekvence znaků) všechny lze stejným způsobem procházet cyklem for, "očíslovat" / získat pořadí prvků funkcí enumerate (viz popis cyklu for) iterable lze přistupovat k prvkům: s[index], s[-index] : záporné číslo znamená od konce >>> "hello"[-1] 'o' lze přistupovat k podsekvencím - slicing: s[od:], s[od:do], [:do], [od:do:krok] s[1:] : od prvku na pozici 1 (včetně) do konce s[:3] : od začátku do prvku na pozici dva (tzn. do poz. 3 "bez") s[::-1] : celý řetězec pozpátku >>> "hello"[:-2] + "world"[-2::-1] "hellrow" lze spojovat operátorem +: >>> s = (1,2,3) + (4,5,6) ; s (1,2,3,4,5,6)
Sekvence, řetězce, kolekce n-tice a řetězec se chovají podobně jsou neměnné sekvence (immutable) : nelze do nich vkládat, mazat, přiřazovat na pozici do jednotlivých prvků >>> s=(1,2,3) ; s[0] = 0 TypeError: 'tuple' object does not support item assignment do seznamu lze přidávat prvky, odstraňovat, přiřadit (změnit prvek) na pozici: změna prvku: >>> lst = [1,2,3] ; lst[1] = 0 ; print lst [1,0,3] změna podsekvence: >>> lst = [1,2,3,4,5] ; lst[1:4] = [0] ; print lst [1,0,5] vložení na konec: >>> lst.append(4) ; lst [1,0,3,4] odstranění: (první odp. prvek) >>> lst = [1,0,2,0,3] ; lst.remove(0) ; lst [1,2,0,3]
Sekvence, řetězce, kolekce slovník: mapuje klíč na hodnotu. Klíčem může být číslo, řetězec, n-tice, avšak ne například seznam: >>> d = { (1,2) : 'raz-dva', (3,4) : 'tri-ctyri' } není seřazený lze ho procházet for cyklem: >>> for k in d:... print "klic :", k, "hodnota :", d[k]... klic : (1, 2) hodnota : raz-dva klic : (3, 4) hodnota : tri-ctyri přístup k hodnotě prvku přes klíč: >>> print d['klic'] vložení: >>> d['klic'] = 'hodnota' odebrání: >>> if 'klic' in d:... del d['klic']... else:... print "pozdě!"
Funkce, list comprehension Definice funkce: def my_func(my_arg): <block of commands> list comprehension: výraz, pracuje se seznamem, výsledkem je nový seznam umožňuje: filtrovat seznam: >>> lst = [1,2,3,4,5,6] ; lst2 = [ x for x in lst if x < 4 ] ; lst2 [1,2,3] provést operaci pro každý prvek seznamu: >>> lst = [1,2,3,4,5,6] ; lst2 = [ x * 2 for x in lst ] ; lst2 [2, 4, 6, 8, 10, 12] kombinaci obojího provést operaci jen, pokud prvek splňuje podmínku: >>> lst = [1,2,3,4,5,6] ; lst2 = [ x * 2 for x in lst if x % 2 == 0 ] ; lst2 [4, 8, 12]