MULTIPLATFORMNÍ PROGRAMOVÁNÍ Přednáška č.10 Programovací jazyk Python, úvod, instalace, základní vlastnosti a příkazy. Programovací jazyk Python

Podobné dokumenty
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ů

Paměť počítače. alg2 1

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Algoritmizace a programování

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Úvod do programovacích jazyků (Java)

Programovací jazyk Pascal

DSL manuál. Ing. Jan Hranáč. 27. října V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

Algoritmizace a programování

8 Třídy, objekty, metody, předávání argumentů metod

Stručný návod k programu Octave

WSH Windows Script Hosting. OSY 2 Přednáška číslo 2 opravená verze z

Funkce, podmíněný příkaz if-else, příkaz cyklu for

Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h>

Úvod do programovacích jazyků (Java)

Algoritmizace a programování

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

7. Datové typy v Javě

Přednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu.

IB111 Úvod do programování skrze Python Přednáška 7

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty.

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

MAXScript výukový kurz

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Zápis programu v jazyce C#

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b

Úvod do programování - Java. Cvičení č.4

6. Příkazy a řídící struktury v Javě

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Jazyk C Program v jazyku C má následující strukturu: konstanty nebo proměnné musí Jednoduché datové typy: Strukturované datové typy Výrazy operátory

PHP - úvod. Kapitola seznamuje se základy jazyka PHP a jeho začleněním do HTML stránky.

ZPRO v "C" Ing. Vít Hanousek. verze 0.3

Algoritmizace a programování

Programování v jazyce JavaScript

Da D to t v o é v ty t py IB111: Datové typy

3 KTE / ZPE Informační technologie

Algoritmizace a programování

- jak udělat konstantu long int: L long velka = 78L;

PSK3-9. Základy skriptování. Hlavička

5 Přehled operátorů, příkazy, přetypování

Úvod do programování. Lekce 1

Řídicí struktury. alg3 1

Konečný automat. Jan Kybic.

Výčtový typ strana 67

5a. Makra Visual Basic pro Microsoft Escel. Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina

VISUAL BASIC. Práce se soubory

Programování: základní konstrukce, příklady, aplikace. IB111 Programování a algoritmizace

Jazyk C# a platforma.net

Objektově orientované programování

Vstupní požadavky, doporučení a metodické pokyny

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

Programování v Pythonu

První kapitola úvod do problematiky

Formátové specifikace formátovací řetězce

X36UNX 16. Numerické výpočty v sh příkazy expr, bc, dc. Zdeněk Sojka

Začínáme vážně programovat. Řídící struktury Přetypování Vstupně výstupní operace Vlastní tvorba programů

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

4a. Makra Visual Basic pro Microsoft Excel Cyklické odkazy a iterace Makra funkce a metody

Funkcionální programování. Kristýna Kaslová

KTE / ZPE Informační technologie

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni!

Lekce 2. Řetězce a práce s nimi. Vstup a výstup. C2184 Úvod do programování v Pythonu podzim 2016

Generické programování

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

Regulární výrazy. Vzory

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje

PROGRAMOVÁNÍ V SHELLU

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

9. přednáška - třídy, objekty

NPRG031 Programování II --- 2/2 Z, Zk

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo

Opakování programování

Úvod do Matlabu. Praha & EU: Investujeme do vaší budoucnosti. 1 / 24 Úvod do Matlabu

Chyby a výjimky. Chyba. Odkud se chyby berou? Kdo chyby opravuje? Co můžete dělat jako programátor? Dvě hlavní metody práce s chybami.

Algoritmy I. Cvičení č. 2, 3 ALGI 2018/19

ADT/ADS = abstraktní datové typy / struktury

Skriptovací jazyky. Obsah

Object Pascal je přísně typový procedurální jazyk, který umožňuje jak strukturované, tak objektově orientované programování.

Příklad: Součet náhodných čísel ve vektoru s počtem prvků, které zadá uživatel, pomocí sum() a pomocí cyklu for. Ověříme, že příliš výpisů na

Základy programování (IZP)

ZÁPOČTOVÁ PRÁCE z UIR

Operační systémy. Cvičení 4: Programování v C pod Unixem

Aplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2006/2007 Radim Farana. Obsah. Obsah předmětu

PŘETĚŽOVÁNÍ OPERÁTORŮ

A7B38UOS Úvod do operačních systémů. 6. Cvičení. Příkazy sed a awk

IUJCE 07/08 Přednáška č. 1

C++ Akademie SH. 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory. Michal Kvasni ka. 20. b ezna Za áte níci C++

Transkript:

Programovací jazyk Python

Co je Python? Python je moderní, platformně nezávislý, interpretovaný programovací jazyk s automatickou správou paměti a dynamickými datovými typy. Umožňuje rychlejší a efektivnější vývoj aplikací než C/C++, Java nebo.net Podporuje platformy Windows, Unix (Linux), OS/2, Macintosh (OS X) Výborně spolupracuje s jinými programovacími jazyky SDK Pythonu obsahuje API rozhraní pro jazyk C Existuje implementace Python syntaxe nad jazykem Java (lze programovat plnohodnotné Java aplikace v jazyce Python) Python lze používat v interaktivním módu, nebo jako klasický prog. jazyk Existuje celá řada aplikací (komerčních i open source), které používají Python jako rozšiřující/skriptovací technologii Caligari TrueSpace, Blender,

Python vs. Jiné programovací jazyky Rychlost výpočtu Rychlost pořízení zdrojového kódu Objektová orientace GUI Vývojové prostředí Vhodnost pro velké projekty Dostupnost knihoven Python 2,5 1 1 1* 1 1 2 Perl 2,5 1 2,5 2* 2,5 2,5 1.NET 2 1,5 1 1 1 1 2 C 1 3 4 3* 1 2 2 C++ 1 2,5 1 1* 1 1,5 2 Java 2,5 2 1 2 1 1 2 hodnoceno jako ve škole 1-nejlepší, 4-nevyhovující *) za použití externích knihoven

Python a Hello World! Python: print "Hello World!" Java: public class Hello { public static void main(string[] args) { System.out.println("Hello World!"); } } C/C++: #include <stdio.h> void main(void) { printf("hello World!"); }

Kde získat Python? Instalace pythonu: Windows: Linux: Python je šířen ve formě jednoduchého instalátoru (obsahuje interpreter, knihovní soubory, základní moduly a jednoduché IDE) http://www.python.org/, http://www.python.org/download/releases/2.5.1/ Python je součástí každé distribuce Linuxu, a/nebo je distribuován ve formě balíčků Vybraná vývojová prostředí: Windows/Linux: Libovolná distribuce Eclipse + rozšíření PyDev SPE Windows: Linux: http://www.eclipse.org/downloads/, http://pydev.sourceforge.net/download.html (balíčky) http://pythonide.blogspot.com/ (balíčky) PyScripter http://pyscripter.googlepages.com/home Erik (balíčky)

Interaktivní konzola Spuštění Pythonu: Windows: Linux: Soubor python.exe (pythonw.exe). Je užitečné doplnit cestu k exe souborům do systémové proměnné PATH. V terminálu napíšeme příkaz python

Eclipse IDE + PyDev (doporučeno)

PyScripter IDE

Shrnutí Automatická správa paměti Jednoduchá syntaxe a sémantika Použitelný pro všechny hlavní platformy Vysoce modulární Vhodný pro psaní skriptů i rozsáhlých projektů Dostatečně rychlý a snadno rozšířitelný o moduly napsané v C/C++ Snádná tvorby GUI pomocí knihoven třetích stran (wxpython, PyGTK, PyQt, ) Zabudované funkce pro trvalé ukládání objektů, vyspělá asociativní pole Výkonné knihovny pro numerické výpočty, manipulace s obrázky, Podpora webových technologií (tvorba webových skriptů, webových služeb (server i klient), ) Podpora široké a aktivní komunity uživatelů Lze ho integrovat s řadou jiných programovacích jazyků Jython, Moduly v C/C++

Přehled jazyka Python

Základy jazyka (1/2) Odsazování textu a bloková struktura kódu Python používá pro určení struktury kódu odsazování Program, který není správně odsazený je syntakticky vadný! Komentáře jsou uvozeny znakem # Víceřádkové dokumentační komentář jsou uvezeny a = 5 b = 6 if a < b: print "A je mensi nez b" else: print "B je mensi nez a"

Základy jazyka (2/2) Přiřazování proměnných Proměnné v Pythonu nemají deklarovaný datový typ Datový typ je vázán na objekt, ne na proměnnou, která s objektem pracuje Jedné proměnné lze v jednom programu přiřadit data různých typů Existují globální a lokální proměnné. Každá proměnná je implicitně považována za lokální. Globální proměnné jsou uvozeny klíčovým slovem global >>> a = "Ahoj" >>> print a 'Ahoj' >>> a = 5 >>> print a 5

Interní datové typy Python obsahuje tyto interní datový typy: Čísla Celá čísla Dlouhá celá čísla Desetinná čísla Komplexní čísla Seznamy N-tice Slovníky Řetězce Souborové objekty

Interní datové typy - Čísla Celá čísla 1, -3, 42, 255 Dlouhá celá čísla 42L, 851324164610465465014640640646L Čísla s desetinnou čárkou: 3.1415927, 31e12, -6e-4 Komplexní čísla: 3+2j, -4-6j Se všemi číselnými typy lze provádět tyto základní aritmetické operace: Sčítání (+) Odčítání (-) Násobení (*) Dělení (/) Mocnina (**) Modulo (%)

Příklady operací s číselnými typy Celá čísla: >>> 2+2 4 >>> # Toto je komentář... 2+2 4 >>> 2+2 # a toto je komentář na řádků s kódem 4 >>> (50-5*6)/4 5 >>> # Dělení celých čísel vrací celý výsledek... 7/3 2 >>> 7/-3-3

Příklady operací s číselnými typy Desetinná čísla: >>> 3 * 3.75 / 1.5 7.5 >>> 7.0 / 2 3.5 Komplexní čísla: >>> 1j * 1J (-1+0j) >>> 1j * complex(0,1) (-1+0j) >>> 3+1j*3 (3+3j) >>> (3+1j)*3 (9+3j)

Matematické funkce Vestavěné funkce: abs, divmod, cmp, coerce, float, hex, int, long, max, min, oct, paw, round Další funkce: Další matematické funkce jsou uloženy v modulu math from math import * acos, asin, atan, atan2, ceil, cos, cosh, e, exp, fabs, floor, fmod, frexp, hypot, ldexp, log, log10, mod, pi, pow, sin, sinh, sqrt, tan, tanh Speciální moduly: NumPy Maticové výpočty, rychlá Fourierova transformace (FFT),

Interní datové typy - Seznamy Seznamy jsou obdobou (dynamických) polí v C/C++ nebo Javě Prvky v seznamu jsou indexovány celočíselnými hodnotami (od 0) Indexy mohou být kladné (postupuje se od začátku seznamu), nebo záporné (postupuje se od konce seznamu) Jeden seznam může obsahovat položky libovolných typů, nebo další seznamy Se seznamy lze operovat pomocí vestavěných funkcí, nebo matematických operátorů Seznamy lze převádět na n-tice pomocí funkce tuple() Prvky seznamu i indexy se píší do hranatých závorek. Prvky jsou oddělovány čárkou

Příklady vytvoření seznamů Ručně vytvořený seznam: >>> a = ['spam', 'eggs', 100, 1234] >>> a ['spam', 'eggs', 100, 1234] Vypočtený seznam: >>> a = 3 * ['ahoj'] + [1, 2, 3] >>> a ['ahoj', 'ahoj', 'ahoj', 1, 2, 3] >>> a = [i for i in range(0, 10) if i%3 == 0] >>> a [0, 3, 6, 9]

Indexování seznamů >>> a = ['ahoj', 'nazdar', 100, 1234] >>> a ['ahoj', 'nazdar', 100, 1234] >>> a[0] 'ahoj' >>> a[3] 1234 >>> a[-2] 100 >>> a[1:-1] ['nazdar', 100] >>> a[:2] + ['cau', 2*2] ['ahoj', 'nazdar', 'cau', 4]

Řezy seznamů >>> # Nahrazení položek:... a[0:2] = [1, 12] >>> a [1, 12, 123, 1234] >>> # Odstranění položek:... a[0:2] = [] >>> a [123, 1234] >>> # Vložení položek:... a[1:1] = ['hi', 'bye'] >>> a [123, 'hi', 'bye', 1234] >>> # Vožení kopie sebe sama na počátek >>> a[:0] = a >>> a [123, 'hi', 'bye', 1234, 123, 'hi', 'bye', 1234] >>> # Ostranění všech prvků seznamu >>> a[:] = [] >>> a []

Zabudované funkce a/pro seznamy Kromě operací s indexy lze seznamy modifikovat pomocí zabudovaných funkcí, atributů a operátorů Funkce přebírají seznam jako parametr len(), del(), min(), max() Atributy jsou volány jako členské funkce seznamu append(), insert(), remove(), reverse(), sort(), index(), count(), pop() Operátory aplikovatelné na seznamy in, not in

Příklady využití funkcí seznamů Funkce: >>> a = ['ahoj', 1, 2] >>> a ['ahoj',1,2] >>> len(a) 3 >>> del a[0] >>> a [1, 2] Atributy: >>> a.append('nazdar') >>> a [1, 2, 'nazdar'] >>> a.insert(1, 1.5) >>> a [1, 1.5, 2, 'nazdar'] >>> a.remove(1.5) >>> a [1, 2, 'nazdar']

Vnořování seznamů, kopie seznamů Seznamy lze vnořovat do sebe (vícerozměrné matice) Prvkem seznamu může být i jiný seznam Při kopírování vnořených seznamů rozlišujeme mělké a hluboké kopie U mělké kopie se nová instance seznamu odkazuje na vnořené seznamy originálu Hluboká kopie vytvoří kompletně nový seznam a také nové instance vnořených seznamů

Příklady vnoření seznamů Vnoření: >>> vnoreny = [0] >>> original = [vnoreny, 1] >>> original [[0], 1] >>> vnoreny[0] = 'nula' >>> original [['nula'], 1] >>> original[0][0] = 0 >>> original [[0], 1] >>> vnoreny = 2 >>> original [[0], 1]

Příklady kopií seznamů Mělká a hluboká kopie: >>> melka = original[:] >>> melka [[0], 1] >>> import copy >>> hluboka = copy.deepcopy(original)

Interní datové typy N-tice Datová struktura podobná seznamu Lze je vytvářet, ale vytvořené n-tice již nelze modifikovat Používají se např. pro předávání složitějších parametrů (jako argumenty funkce nebo návratové hodnoty) Další vlastnosti: Prvky v n-tici jsou indexovány celočíselnými hodnotami (od 0) Jedna n-tice může obsahovat položky libovolných typů S n-ticemi lze operovat pomocí vestavěných funkcí, nebo matematických operátorů N-tice lze převádět na seznamy pomocí funkce list() Prvky n-tic se píší do kulatých závorek (jsou oddělovány čárkou), indexy se píší do hranatých závorek.

Příklady práce s n-ticemi >>> x = ('a', 'b', 'c') >>> x ('a', 'b', 'c') >>> x[2] 'c' >>> x[1:] ('b', 'c') >>> len(x) 3 >>> max(x) 'c' >>> 2 * x ('a', 'b', 'c', 'a', 'b', 'c') >>> 5 in x 0 >>> x[2] = 'd' Traceback (innermost least): File "<stdin>" line 1, in? TypeError: object doesn't support item assignment

Jednoprvkové N-tice Jednoprvkové n-tice musí být vždy zakončeny čárkou U N-tic tvořených aritmetickým výrazem by nebylo možné rozeznat, zadá má být výsledkem n-tice, nebo hodnota >>> x = 3 >>> y = 4 >>> (x + y) # sečte hodnoty proměnných x a y 7 >>> (x + y,) # čárka značí, že se jedná o n-tici (7,)

Skládání a rozklad N-tic N-tice lze využít k vícenásobné inicializaci proměnných Inicializace proměnných: >>> (jedna, dve) = (1, 2) >>> jedna 1 >>> dve 2 >>> x = (jedna, dve) = (1, 2) >>> x (1, 2) >>> jedna 1 >>> x[1] 2 >>> jedna, dve = 1, 2 >>> dve 2

Skládání a rozklad N-tic N-tice lze skládat z jiných n-tic (platí i pro seznamy) Skládání n-tic: >>> [a, b] = [1, 2] >>> [c, d] = 3, 4 >>> (e, f, g) = 5, 6, 7 >>> a 1 >>> [b, c, d] [2, 3, 4] >>> (e, f, g) (5, 6, 7) >>> a, b, c (1, 2, 3)

Interní datové typy Slovníky Datová struktura odpovídající svou funkcionalitou asociativním polím, nebo hashovaným tabulkám Používají se např. pro vyhledávání položek označených složitými klíči Další vlastnosti: Prvky ve slovníku jsou indexovány celočíselnými hodnotami, řetězci, nebo jinými objekty Pythonu Jeden slovník může obsahovat prvky libovolných typů Jednu položku slovníku tvoří klíč a hodnota Se slovníky lze operovat pomocí vestavěných funkcí, atributů, nebo matematických operátorů Položky slovníků se píší do složených závorek (jsou oddělovány čárkou), klíč je od prvku oddělen dvojtečkou.

Příklady práce se slovníky 1/2 >>> cz2eng = {} # nový prázdný slovník >>> cz2eng['červená'] = 'red' # postupné naplnění položek >>> cz2eng['modrá'] = 'blue' >>> cz2eng['zelená'] = 'green' >>> cz2eng['červená'] 'red' >>> a = {'key1' : 1, 'key2' : 2 } # nový naplněný slovník >>> a['key1'] 1 >>> len(a) 2 >>> a.keys() ['key1', 'key2'] >>> a.values() [1, 2] >>> a.items() [('key1', 1), ('key2', 2)]

Příklady práce se slovníky 2/2 >>> a = {'key1' : 1, 'key2' : 2 } # nový naplněný slovník >>> a.has_key('key1') True >>> del a['key1'] >>> a.has_key('key1') False >>> a.get('key1', 'Klíč neexistuje') 'Klíč neexistuje' >>> a.get('key2', 'Klíč neexistuje') 2

Interní datové typy - Řetězce Python obsahuje silnou podporu pro práci s řetězci Řetězce lze vymezit pomocí: Uvozovek: Hello World. Součástí textu mohou být i jednoduché uvozovky (apostrofy) Jednoduchých uvozovek (apostrofů): Hello World. Součástí textu mohou být i klasické uvozovky. Trojitých uvozovek: Hello World. Součástí textu mohou být i nové řádky. Zároveň se používá jako dokumentační řetězec na začátku modulu, nebo funkce. S řetězci lze operovat pomocí vestavěných funkcí, nebo matematických operátorů in, +, *, len(), max(), min() S řetězci lez pracovat stejně jako se seznamy (lze indexovat znaky, provádět řezy, ) Řetězce jsou stejně jako n-tice neměnné. Řetězce lze převádět na seznamy (list())nebo n-tice (tuple()). Pro práci s řetězci existují speciální moduly string a re

Funkce pro práci s řetězci S řetězci lze pracovat pomocí velkého množství zabudovaných funkcí (atributů) Např. center(), ljust(), rjust(), count(), strip(), split(), join(), replace(), atof(), atoi(), Stejně jako u jiných jazyků i v Pythonu existují speciální řídící znaky Escape sekvence Představuje znak \' jednoduché uvozovky \" dvojité uvozovky \\ zpětné lomítko \a znak "zvonek" \b o jeden znak zpět (backspace) \f posuv papíru (nová stránka) \n nový řádek \r návrat vozíku \t tabulátor \v svislý tabulátor

Příklady práce s řetězci Interní funkce řetězce: >>> s = 'Hello World!' >>> s.split() ['Hello', 'World'] >>> list(s) ['H', 'e', 'l', 'l', 'o', '', 'W', 'o', 'r', 'l', 'd'] >>> s.rjust(20) # existují i obdobné funkce ljust() a center() ' Hello World' >>> s.count('l') 3 Funkce modulu string: >>> import string >>> s = 'Hello World' >>> string.split(s) ['Hello', 'World'] >>> z = string.join(["ahoj", "Svete"], "::") >>> z 'Ahoj::Svete' >>> string.replace(z, "::", " ") 'Ahoj Svete' >>> string.find(s, 'l') # existují i varianty lfind() a rfind() 2 >>> string.find(s, 'a') -1

Převod objektů na řetězce Na řetězec lze převést cokoliv Formální řetězcová reprezentace: repr(), `` Technicky zaměřený popis objektu Neformální řetězcová reprezentace: str() Textová informace určená pro uživatele >>> x = (1, 2) >>> repr(x) '(1, 2)' >>> `x` '(1, 2)' >>> str(x) '(1, 2)' >>> repr(len) '<built-in funcion len>'

Formátování řetězců Řetězce lze formátovat podobně jako v jazyce C/C++ Pro náhradu formátovacích sekvencí za příslušné hodnoty slouží operátor % >>> "%s. den v týdnu je %s" % (1, 'pondělí') '1. den v týdnu je pondělí' >>> "Pi je <%6.2f>" % 3.14159267 'Pi je < 3.14>' >>> "Pi je <%-6.2f>" % 3.14159267 'Pi je <3.14 >' >>> dict = {'e' : 2.718, 'pi': 3.14159267} >>> "%(pi).2f -> %(pi).4f -> %(e).2f" % dict '3.14 -> 3.1416 -> 2.718'

Řízení toku programu

Cyklus while Základní programový cyklus pythonu sestávající s podmínky, těla a nepovinného pokračování kódu. V těle cyklu lze volat příkazy break a continue break ukončí vykonávání cyklu continue započne vykonávání další iterace while podmínka: # tělo kódu else: # nepovinné pokračování kódu >>> i = 0 >>> while i < 10:... print i,... i = i + 1... else:... print 'konec'... 1 2 3 4 5 6 7 8 9 konec

Konstrukce if-elif-else Rozhodovací konstrukce může obsahovat: Jeden výskyt klíčového slova if Následně libovolný počet klíčových slov elif Dle potřeby může být zakončena klíčovým slovem else if podmínka 1: # tělo kódu 1 elif podmínka 2: # tělo kódu 2 elif podmínka 3: # tělo kódu 3 else: # tělo kódu 4 >>> if (i > 0) and (i < 10):... print 'ahoj'... elif (i >= 10) and (i < 20):... print 'nazdar'... else:... print 'cau'

Cyklus for Na rozdíl od jazyka C/C++ příkaz for netestuje podmínku, ale pracuje s danou posloupností (seznam, řetězec, ) Příkaz for se velmi často používá s funkcí range(from, to, step) nebo xrange(from, to, step) Funkce range(from, to, step) vytváří seznam celočíselných hodnot v rozsahu od from do to (poslední hodnota není v seznamu zahrnuta) s celočíselným krokem step (hodnota step může být kladná pro vzestupné seznamy a záporná pro sestupné seznamy) Funkce xtange(from, to, step) se chová stejně jako range(), ale pythonovský seznam nevytváří; pouze funkci for dodává jeho pomyslné položky (šetří tím paměť) for proměnná in posloupnost: # tělo programu else: # nepovinné pokračování kódu

Příklady práce s cyklem for >>> x = [1, 3, 5, 7, 9] >>> for i in x:... print i,... 1 3 5 7 9 >>> for i in range(1, 10, 2):... print i,... 1 3 5 7 9 >>> for i in range(10, 1, -2):... print i,... 9 7 5 3 1 >>> for i in 'Ahoj':... print i,... A h o j

Logické operátory U podmínkových výrazu lze složitější podmínky vytvářet pomocí následujících logických operátorů: < - menší > - větší <= - menší nebo roven >= - větší nebo roven == - roven!= - nerovnost <> - nerovnost and or not in - logický součin - logický součet - negace - je obsažen not in - není obsažen

Konzolový vstup a výstup

Výstup na konzolu Pro výstup na konzolu (terminál) slouží příkaz print Příkaz automaticky odřádkuje vytištěný obsah Chceme-li pokračovat ve výpisu na novém řádku, vložíme za příkaz print znak,(čárku) >>> s = "Ahoj světe" >>> s 'Ahoj sv\xd8te' >>> print s 'Ahoj světe' >>> for i in range(1,4):... print i... 1 2 3 >>> for i in range(1,4):... print i, # povšimněte si vložené čárky na konci řádku... 1 2 3

Vstup z konzole Pro vstup z konzole (terminálu) slouží příkazy raw_input() a input() Příkaz raw_input(message) čte libovolná data z aktuálního vstupu a vrací je ve formě textového řetězce Požadujeme-li vstup v jiném datovém formátu, můžeme výstup z funkce převést pomocí interního přetypování (např. int(raw_input())) Pokud nelze přetypování provést, bude vyvolána vyjímka Příkaz input(message) čte data z aktuálního vstupu a převádí je na konkrétní datový typ. Funkce je ekvivalentem výrazu eval(raw_input()) Funkce eval(src) vyhodnotí zdrojový výraz a vrátí příslušnou hodnotu Vkládání dat je ukončeno po stisku klávesy ENTER

Příklady zpracování vstupu z konzole Funkce raw_input(): >>> jmeno = raw_input('zadej jmeno: ') Zadej jmeno: Michal >>> jmeno 'Michal' >>> rok = int(raw_input('zadej rok: ')) Rok: 2007 >>> rok 2007 >>> poradi = int(raw_input('zadej poradi: ')) Zadej poradi: ahoj Traceback (most recent call last): File "<stdin> ", line 1, in <module> ValueError: Invalid literal for int() with base 10: 'ahoj' Funkce input(): >>> jmeno = input('zadej jmeno: ') Zadej jmeno: Michal >>> jmeno 'Michal' >>> rok = input('zadej rok: ') Zadej rok: 2007 >>> rok 2007

Funkce a procedury

Uživatelem definované funkce Základní syntaxe pro definici funkce nebo procedury je def jmeno(param1, param2, ): Funkce mohou vracet návratovou hodnotu pomocí příkazu return Není-li příkaz return v těle funkce použit, je návratová hodnota rovna None Funkce lze přiřazovat proměnným (vytvářet aliasy), nebo je vkládat např. do slovníků Parametry funkcí lze definovat explicitně, pomocí polí, nebo slovníků Lze definovat implicitní hodnoty parametrů Python umožňuje definovat tzv. Lambda funkce lambda param1, param2 : příkaz Velmi krátké a jednoduché funkce použitelné např. společně s filtry, nebo mapami. Funkce by měly jako první řádek/řádky obsahovat dokumentační řetězce. Tento text je pak dostupný prostřednictvím systémové proměnné doc jmeno. doc

Základní práce s funkcemi >>> def faktorial(n):... """ faktorial(n) -> Funkce pro vypocet faktorialu z... hodnoty n """... vysl = 1... for i in xrange(1, n+1):... vysl = vysl * i... return vysl... >>> faktorial(10) 3628800 >>> faktorial. doc ' faktorial(n) -> Funkce pro vypocet faktorialu z hodnoty n ' >>> f = faktorial >>> f(10) 3628800 >>> Funkce = {"FCT" : faktorial) >>> Funkce['FCT'](10) 3628800 >>> Funkce['FCT']. doc ' faktorial(n) -> Funkce pro vypocet faktorialu z hodnoty n '

Předávání parametrů Parametry lze funkcím předávat: U pevného počtu argumentů funkce: Hodnotami Jmény proměnných U proměnlivého počtu argumentů funkce: Pomocí seznamu Pomocí slovníku Parametry se předávají odkazem, takže u měnitelných datových typů se chovají jako reference na objekt v C++

Předávání parametrů Pevný počet argumentů funkce (s implicitními hodnotami): >>> def soucet(a = 0, b = 0):... """ soucet(n) -> Secte hodnoty a + b """... return a + b... >>> soucet(2, 3) 5 >>> soucet() 0 Proměnný počet argumentů funkce: >>> def soucet(*cisla):... souc = 0... for n in cisla:... souc = souc + n... return souc... >>> soucet(1, 2) 3 >>> soucet(1, 2, 3, 4, 5) 15 >>> def funkce(**args):... for key in args.keys():... print 'parametr %s ma hodnotu %s' % (key, args[key])... >>> funkce(a=1, b=2) parametr a ma hodnotu 1 parametr b ma hodnotu 2

Lokální a globální proměnné Každá proměnná je ve své oblasti viditelnosti implicitně definována jako lokální Globální proměnné musí být explicitně zpřístupněny pomocí klíčového slova global >>> a = 1 >>> b = 2 >>> def funkce():... global a... a = 3... b = 4... >>> a 1 >>> b 2 >>> funkce() >>> a 3 >>> b 2

Zajímavé zabudované funkce

Zajímavé zabudované funkce a symboly Symboly: name Řetězec představující jméno modulu (pro hlavní/spuštěný modul bude mít hodnotu main ) doc Dokumentační řetězec modulu/funkce/objektu/atributu Funkce: del() dir() Odstranění objektu/prvku Seznam jmen funkcí/proměnných/objektů a atributů definovaných v daném objektu nebo aktuální session eval() Vyhodnocení daného řetězce nebo objektu programového kódu jako výrazu Pythonu compile() Kompilace daného zdrojového textu jako programu jazyka Python (výstup lze použít jako argument funkce Eval()

Příklady použití funkcí eval, compile, a symbolu doc Vlastní interpreter jazyka Python: while True: cmd = raw_input("zadej vyraz/prikaz: ") if cmd == 'QUIT': # zadáním příkazu "QUIT" se skript ukončí break else: eval(compile(cmd, '', 'single')) # vyhodnoť a proveď příkaz print 'Koncim, nashle...' Prohlížeč nápovědy funkcí a modulů: while True: # zadej jméno objektu/modulu, pro který se vypíše nápověda module = raw_input('zadej jmeno dostupneho modulu/objektu: ') # vyhledej jména všech dostupných symbolů v daném modulu/objektu for f in dir(eval(module)): # získej objekt z jeho jména a vypiš jeho nápovědu print eval(module + '.' + f). doc

Aplikace v Pythonu Nějaké dotazy?