Klára Pešková peskova@braille.ms.mff.cuni.cz Python Klára Pešková peskova@braille.ms.mff.cuni.cz.

Slides:



Advertisements
Podobné prezentace
Standardní knihovní funkce pro práci s textovými řetězci
Advertisements

Pro začátek něco lehčího
VISUAL BASIC Práce s řetězci Použitá literatura: Kvoch: Visual Basic 4.
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
ŘÍDÍCÍ STRUKTURY - PODMÍNKY
Vlastní skript může být umístěn: v hlavičce stránky v těle stránky
Dynamické dokumenty na straně klienta Informatika pro ekonomy II.
Seminář C++ 5. cvičení Dědičnost Ing. Jan Mikulka.
Programovací jazyk C++
Programování funkcí v Excelu
HYPERTEXT PREPROCESSOR. JAZYK PHP. Jazyk PHP (Hypertext PreProcessor) je intepretovaný jazyk určený pro web. Je celkem jednoduchý, snadno přenositelný.
VISUAL BASIC Práce se soubory.
Semestrální práce KIV/PT Martin Kales Hana Hůlová.
Třída Array Je součásti balíčku java.util Účelem je usnadnit práci s poli Metody – nejpoužívanější equel(),fill(),sort() a binarySearch() equels() Slouží.
Pole, ukazatele a odkazy
C# pro začátečníky Mgr. Jaromír Osčádal
Skriptový jazyk, který se používá při tvorbě stránek.
Programování v Pascalu Přednáška 7
Materiály k přednášce Úvod do programování Ondřej Čepek.
J a v a Začínáme programovat Lucie Žoltá pole řetězec debugr.
J a v a Začínáme programovat Lucie Žoltá. Odkazy - oficiální stránky (překladače, help, metody, vývojové prostředí NetBeans,...)
Práce se soubory. * soubory patří k základním datovým prvkům v počítači * převážná většina programovacích jazyků má podporu určité formy práce se soubory.
A1PRG - Programování – Seminář Ing. Michal Standardní knihovní funkce pro práci se soubory 13 Verze
Vyučovací hodina 1 vyučovací hodina: Opakování z minulé hodiny 5 min Nová látka 20 min Procvičení nové látky 15 min Shrnutí 5 min 2 vyučovací hodiny: Opakování.
OSNOVA: a) Řetězce v C b) Funkce stdio.h pro řetězce c) Funkce string.h pro řetězce d) Příklad Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
A1PRG - Programování – Seminář Ing. Michal Operátory (2. část) 4 Verze
Seminář C cvičení STL, Trolltech Ing. Jan Mikulka.
Softwareová architektura
PB161 – Programování v jazyce C++ Objektově Orientované Programování
PHP – Základy programování
Datové typy a práce s nimi
Návrh a tvorba WWW Přednáška 11
Počítače a programování 1
JavaScript Podmínky, cykly a pole.
OSNOVA: a)Programování se soubory b)Záloha databáze v souboru c) Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování.
Návrh a tvorba WWW Cvičení 4
VISUAL BASIC PRALG.
Návrh a tvorba WWW Přednáška 5 Úvod do jazyka PHP.
Objektově orientované programování - cvičení 1
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
Programovací jazyk Haskell doc. Dr. Ing. Miroslav Beneš  katedra informatiky, A-1007 
Počítače a programování 1 7.přednáška. Základy Pole ve třídách a metodách Pole Arrays.
Datové typy a operátory. Co jsou datové typy  Charakterizují proměnnou nebo konstantu – jaká data obsahuje  Data jsou v počítači ukládána jako skupiny.
Systém souborů. Množina souborů různých typů – Data – Spustitelné programy – Konfigurační a pomocné informace – I/O zařízení Způsob organizace množiny.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
Úvod do UNIXu (6th round)
Datové typy IB111: Datové typy. Data a algoritmizace jaká data potřebuji pro vyřešení problému? jak budu data reprezentovat? jaké operaci s nimi potřebuji.
IB111 Programování a algoritmizace
IB111 Práce se soubory Správa paměti. Práce se soubory v Pythonu Soubor musíme „otevřít“ Poté s ním pracujeme –Čteme a/nebo zapisujeme Nakonec musíme.
Python Klára Pešková
Překladače 1. Překladače a programovací jazyky © Milan Keršlágerhttp:// Obsah:
PROGRAMOVÁNÍ 3ITA,3ITB Jaroslav Burdys Hlavní zdroj:
Praha & EU: Investujeme do vaší budoucnosti Evropský sociální fond Gymnázium, Praha 10, Voděradská 2 Projekt OBZORY Datové typy a operátory Základní programové.
Překladače 6. Sémantická analýza
Makra v Excelu syntaxe. Zápis nahraného makra SubEnd Sub O klíčová slova Sub a End Sub – začátek a konec makra O komentáře O text za znakem ', až do konce.
Moduly.
Programování ENUM, SWITCH,pole jednorozměrná a vícerozměrná, deklarace, inicializace, kopírování, porovnání Erik Král.
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
Úvod do Pythonu – IO operace se soubory.
Překladače Syntaktická analýza
Programovací jazyk C Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Jitka Vlčková. Dostupné z Metodického portálu ISSN.
Algoritmizace a programování
Programování 2. hodina RNDr. Jan Lánský, Ph.D.
Návrhový vzor Flyweight
Moderní didaktické technologie a zdroje informací
TNPW1 JavaScript Ing. Jiří Štěpánek.
C# přehled vlastností.
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
ALG 14 Vícedimenzionální data Řazení vícedimenzionálních dat
CU01 Informatika II 2/13 Základy algoritmizace
Transkript prezentace:

Klára Pešková peskova@braille.ms.mff.cuni.cz Python Klára Pešková peskova@braille.ms.mff.cuni.cz

Proč zrovna Python? rychlý vývoj aplikací (včetně GUI) nezávislý na platformě (Windows, Unix, OS/2, Macintosh, Windows CE ) - přenositelnost ...a je to zadarmo! Python can do it all

Programovací jazyky Strojové Systémové Skriptovací instrukce "1:1" Assembler Systémové "high-level": primitiva jazyka nekorespondují přímo se strojovými instrukcemi dá se v nich napsat "všechno" C, Pascal, Java... Skriptovací ještě víc "high-level" - "glue", lepíme z komponent Python, Perl, bash, Visual Basic, ...

Rychlost Systémové Skriptovací rychleji to běží pomaleji se to píše rychleji se to píše pomaleji to běží

Skriptovací jazyky - typické vlastnosti interpretované původně spíše special-purpose reflexe (kód = data) většinou bez explicitně určovaných typů typy určeny až za překladu často podpora zpracování textu

Kdy použít a kdy ne? Rychlost programu je kritická "Low-level" kód Rychlost vývoje je kritická Prototypování Předpoklad požadavků na změny "Special-purpose" GUI, řetězce, ... Nižší nároky na programátora Rychlost programu je kritická "Low-level" kód ovladač karty Manipulace s velikými daty Kritické aplikace, silná potřeba ladění

Python - úvod Vznik – 1990, Python 3.0 – 3. prosince 2008 „krásný, jedoznačný, jednoduchý“ Hybridní (víceparadigmatický jazyk) – objektové i procedurální programování, prvky funkcionálního programování Open source Skriptovací, interpretovaný jazyk (jako např. PHP, JavaScript, Perl) pomalý x rychlý vývoj aplikací Implementovaný v jazyce C (výkonově kritické knihovny rychlé) -> 3-5x rychlejší než PHP

Guido van Rossum – tvůrce Pythonu Úvod II. snadné začátky - interaktivní režim vhodný pro výuku programování, expresivní vhodný pro krátké skripty i větší projekty automatická správa paměti konzistentní vzhled programů dobrá podpora OOP jednoduché propojení s jinými programovacími jazyky (C/C++, Java, COM objekty) použití: prototypování, umělá inteligence (BioPython, matplotlib, NumPy), webové aplikace (Django, Zope) Guido van Rossum – tvůrce Pythonu

Používá se to? skriptování - např. Gimp, Blender, Corel Paint Shop Pro, Maya Google uses Python for many tasks including the backends of web apps such as Google Groups, Gmail, and Google Maps, as well as for some of its search-engine internals (Unladen Swallow) NASA is using Python to implement a CAD/CAE/PDM repository and model management, integration, and transformation system which will be the core infrastructure for its next-generation collaborative engineering environment. Youtube uses Python "to produce maintainable features in record times, with a minimum of developers" Yahoogroups uses Python "to maintain its discussion groups" BitTorrent klient, Civilization 4 zdroj: wikipedia

Python vs. C, C++, Pascal dynamické typování automatické řízení paměti kratší a přehlednější kód, snadnější vývoj ale pomalejší a větší pamětové nároky C 3-5x rychlejší matematické výpočty: C až 10x rychlejší práce s řetězci - stejně (dobré knihovny) řešení: možnost psát kritické moduly v C/C++

Python vs. the others II. rychlost výpočtu psaní kódu objektová orientace vývojové prostředí vhodnost pro velké projekty dostupnost knihoven Python uspokojivý vynikající dobrý C slabý C++ Java zdroj: D. Harms, K. McDonald - Začínáme programovat v jazyce Python, Computer Press, Brno 2003

Syntax jeden z cílů při vývoji - srozumitelný, krátký kód odsazování nutí psát přehledný kód; jednotý vzhled dynamické typování case sensitive def f(): if random.random() < 0.5: return False else: return True f()

Základní číselné typy Celá čísla - int Reálná čísla – float a = 5 long (C) Reálná čísla – float b = 5.5; c = -3e-3 double (C) Dlouhá celá čísla (neomezeně dlouhá) - long c = 2000000000000000000004432000000L Komplexní čísla - complex x = (3+3j) x.real x.imag

Základní číselné typy II. Aritmetické operátory: +, -, *, /, //, **, % Matematické funkce round() abs() max(), min() další funkce v modulu math (cmath): ceil(), floor() Goniometrické funkce, logaritmus…

Znakové řetězce - string s = "Ahoj" k položkám řetězce je možné přistupovat, ale není možné je měnit >>> t[0] # indexování od 0 'A' >>> t[1] = 'a' délka řetězce - funkce len(t) podpora Unicode

Práce se znakovými řetězci spojování řetězců >>> s = "Ahoj" >>> r = "lidi" >>> print (s+" "+r) 'Ahoj lidi' "násobení" rětězců >>> s = "ra"+"ta"*2 >>> s 'ratata' slicing >>> t[1:4] # vypise znaky <1,4) >>> t[:2] # prvni dva znaky >>> t[2:] # vse krome prvnich dvou znaku >>> t[-1] # vypise posledni znak

Práce se znakovými řetězci II. některé vestavěné funkce pro práci s řetězci capitalize() center(width[, fillchar]) find(sub[, start[, end]]) # vraci index isalnum(), isalpha(), isdigit(), islower(), isspace() join(seq) strip([chars]) split([sep [,maxsplit]]), splitlines([keepends]) replace(old, new[, count]) modul string whitespace - řetezec znaků digits, hexdigits formátování řetězců >>>"{0} je {1} {2}"format("Python", "cool", "jazyk") Python je cool jazyk.

Seznamy - list s1 = [1, 2, 3, 4] položky seznamu můžou být různé datové typy (i seznamy, n-tice...) s2 = [a, 2, "tri", [4, "ctyri"], 5.5] k položkám je možné přistupovat i je měnit >>> s1[0] 1 >>> s2[3] [4, 'ctyri'] >>> s2[3][1] 'ctyri' >>> s2[3] = 'slunicko' >>> s2 [a, 2, 'tri', 'slunicko' , 5.5]

Seznamy II. seznamy je možné spojovat funkce >>> s3 = s1 + s2 + [5] # vsechny polozky musi byt seznamy funkce len(s1) - vrátí počet položek seznamu při práci se seznamy se kopíruje pouze ukazatel na seznam modul copy - copy.deepcopy(seznam)

Seznamy III. Seznam jako zásobník Seznam jako fronta >>> zasobnik = [3, 4, 5] >>> zasobnik.append(6) # přidá prvek na konec >>> zasobnik.pop() # vrátí prvek z konce # zásobníku a smaže ho Seznam jako fronta >>> fronta = ['Jan', 'Pavel', 'Tomas'] >>> fronta.append(3) >>> fronta.pop(0) # vrátí první prvek a # smaže ho

Množiny (set) - neuspořádaný datový typ - set, frozenset - podpora množinových operací – operátory: | sjednocení & průnik - rozdíl ^ symetrický rozdíl

N-tice - tuples prvky n-tic není možné měnit => méně místa v paměti, rychlejší přístup použití - jako klíče slovníků mají neměnnou velikost, neměnné prvky >>> n = (1, 'A', 3) jednoprvková n-tice: >>> a = ('a',) není nutné psát závorky >>> i, j, k = n >>> i, j = j, i # prohodí prvky

... další věci k proměnné lze přiřadit jakýkoliv typ hodota None list(n) - udělá z n-tice, řetězce seznam tuple(n) - vytvoří n-tici ze seznamu, z řetězce k proměnné lze přiřadit jakýkoliv typ hodota None Boolean True, False hodnota false - 0, prázdná hodnota true - všechno ostatní

Slovník - dictionary = "hash", "asociativní pole", pole indexované čímkoliv klíče mohou být neměnné datové typy - čísla, znakové řetězce, n-tice položky nejsou uspořádané vzdalenosti = {'Karluv most': 160, 'hospoda': 50, 'Hrad': 300, 'zachody': 'pobliz' } změna položky: vzdalenosti['zachody'] = "v prvnim patre" přidání položky: vzdalenosti['koupaliste'] = '1 km' smazání položky: del vzdalenosti['zachody']

Slovník II. vypsání klíčů: testování přítomnosti klíče: for klic in vzdalenosti: print klic testování přítomnosti klíče: 'hospoda' in vzdalenosti # True, False vzdalenosti.get('potraviny', 'neznama') př. použití - řídká matice: matice = {(0, 0): -3, (1, 2): 7, (2, 0) : 4, (3, 2): 5}

Podmínky if, else, elif syntax s dvojtečkou Python nemá "switch" if i < 5: print "i je mensi nez 5" else: print "i je vetsi nebo rovno nez 5" Python nemá "switch"

Operátory aritmetické: logické: porovnávací: +, -, *, /, //, **, % and, or, not porovnávací: <, >, <=, >=, ==, !=, in, not in 0 < a < 10

Cykly - while while cyklus: break, continue else while i < 10: print (i*3) i += 1 break, continue else

Cykly - for for cyklus - iterace přes skupinu položek (sekvenci) - seznam, n-tice, znakový řetězec... for i in [1, 'deset', 100.5]: print (i) funkce range(-4, 6, 2) – vrací iterátor ~ čísla z intervalu <-4,6) s krokem 2 for i in range(6): # <0,6), tj. print (i) # provede se 6x for i in range(-4, 6): # krok 1

Funkce proměnné ve funkcích jsou lokální Funkce v proměnné def dohromady(prvni, druhy) : global x # globalni promenna lokalni = prvni + druhy return lokalni >>> print (dohromady(1, 2)) >>> print (dohromady("lady", "bird")) Funkce v proměnné >>> f_prom = dohromady >>> f_prom(1, 2)

Funkce II. - předávání parametrů odkazem: seznam, slovník, instance třídy hodnotou: n-tice, řetězec, číslo různé způsoby předávání parametrů: implicitní hodnota, předávání jménem: arg=hodnota proměnlivý počet parametrů: *args # seznam **args # slovnik příklad: def funkce(x = 0, y, **dalsi): pass funkce(2, y="3", prvni=1, druhy=2)

(Ne)měnné typy neměnné: měnitelné: čísla, znakové řetězce, n-tice "normální" kopírování předávání hodnotou klíče slovníků měnitelné: seznamy, slovníky, instance tříd kopíruje se pouze ukazatel předávání odkazem

exec Vykoná kód v řetězci >>> a = 5 >>> s = "print ('hodnota a je:', a)" >>> exec (s) >>> s1 = "for i in [1, 2, 3] :\n" >>> s2 = "\t print (i)\n" >>> s = s1 + s2

Regulární výrazy modul re syntax: . - libovolný znak (kromě dalšího řádku) ^ - začátek řetězce $ - konec řetězce * - nula nebo více opakování předešlého výrazu + - jedno nebo více opakování předešlého výrazu ? - nula nebo jedno opakování předešlého výrazu [] - množina prvků, např. [a-zA-Z0-9] [^W] - všechny znaky kromě W {m} - m opakování výrazu {m, n} - m až n opakování >>> regexp = re.compile('[abc]+') vyhledávání regulárního výrazu v řetězci: regexp.search("ahoj") # vrací None nebo objekt regexp.findall("abeceda") # vrací seznam všech výskytů

Python & OOP atributy třídy lze definovat za běhu (dokonce i nové třídy) class Kruh: pass k = Kruh() k.polomer = 7 # proměnná instance Kruh.barva = 'bila' # proměnná třídy >>> k.barva 'bila' přístup k položkám instance.promenna pokud neexistuje proměnná instance, hledá se proměnná třídy (dá se využít pro nastavení implicitních hodnot)

OOP - dědičnost class Kruh(Tvar): def __init__(self): # musíme explicitně zavolat konstruktor # rodičovské třídy Tvar.__init__(self) pozor na kolize jmen proměnných => soukromé proměnné ( __promenna ) vícenásobná dědičnost (C++ omezení, Java zakazuje) - kolize názvů

OOP - správa paměti destruktor: def __del__(self) odstranění instance po smazání posledního ukazatele na ni Poznámky: umí: přetěžování operátorů neumí: metody tříd

Práce se soubory >>> f = open("pokus.txt", 'w') otevře soubor pro zápis >>> f.write("ahoj\n") zapíše do souboru „ahoj“ a odřádkuje >>> f.close() zavře otevřený soubor >>> f = open("pokus.txt") otevře soubor pro čtení >>> f.read() načte celý soubor do jednoho řetězce >>> f.readline() načte jednu řádku >>> f.readlines() načte soubor po řádkách, řádky ukládá do seznamu

Užitečné funkce - len() - int() - přetypování - bin(), hex(), 0b1001, 0x00FF00 - třídění: - merge sort sorted(x, reverse = True) sorted (x, key = myKey)

Co ještě... výjimky Tkinter dokumentační řetězce: """ ... """ funkce.__doc__ vytvoření .exe souboru (py2exe)

Python 3000 vs Python 2.x print je funkce print x, => print(x, end=" ") # přidá na konec mezeru místo nového řádku range(), dict.keys(), dict.values() nevrací seznamy list.sort() nepodporuje argument cmp 1/2 vrací float; (1 // 2) podpora Unicode <>, != => != exec je funkce

Kde se dozvědět více? http://www.python.org/ Python documentation (incl. Tutorial) - součást instalace Mark Summerfield – Python 3 Výukový kurz, Computer Press, Brno 2010 D. Harms, K. McDonald - Začínáme programovat v jazyce Python, Computer Press, Brno 2003 grafická knihovna Tkinter http://www.pythonware.com/library/tkinter/introduction/

Práce s moduly používání: jak vypsat všechny dostupné moduly import jmeno_modulu from jmeno_modulu import jmeno_funkce from jmeno_modulu import * jak vypsat všechny dostupné moduly help(), modules v adresáři "Lib" dir(jmeno_modulu) pokud se modul změní => reload(module) vlastní moduly

Některé další moduly copy os sys time re types string random copy(objekt1) -> objekt2 deepcopy(objekt1) -> objekt2 os funkce pro operace závislé na platformě sys systémové funkce a konstanty time sleep(integer) time() re types string random

Modul random pseudonáhodné generátory randint(a, b) choice(seq) shuffle(x[, random]) # zamíchá sekvenci # na místě sample(population, k) random() # <0, 1) uniform(a, b) gauss(mu, sigma)