Programování v Pythonu

Podobné dokumenty
Programování v Pythonu

Programování v Pythonu

Programování v Pythonu

Programování v Pythonu

Programování v Pythonu

Programování v Pythonu

Programování v Pythonu

Programování v Pythonu

Programování v Pythonu

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ů

Programování v Pythonu

Programování v Pythonu

Programování v Pythonu

Programování v Pythonu

Programování v Pythonu

Programování v Pythonu

Programování v Pythonu

Programování v Pythonu

Programování v Pythonu

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

Lekce 4. Kolekce. Kolekce - seznamy, N-tice a slovníky. C2184 Úvod do programování v Pythonu podzim 2016

Python profesionálně: dynamické parametry, generátory, lambda funkce... with. Dynamické parametry

PARADIGMATA PROGRAMOVÁNÍ 2 PŘÍSLIBY A LÍNÉ VYHODNOCOVÁNÍ

Třídění a vyhledávání Searching and sorting

IB111 Úvod do programování skrze Python

KMI / TMA Tvorba mobilních aplikací. 6. seminář ZS 2016/2017 Středa 13:15-15:45

Rozptylovací tabulky

Programování v Pythonu

Kolekce, cyklus foreach

Datové typy v Javě. Tomáš Pitner, upravil Marek Šabo

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

Stromy. Jan Kybic.

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)

Vestavěné nástroje Pythonu

Evoluční algoritmy. Podmínka zastavení počet iterací kvalita nejlepšího jedince v populaci změna kvality nejlepšího jedince mezi iteracemi

KATALOGOVÝ LIST ASTOR I No

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)

Programování. Psaní čistého kódu. Martin Urza

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

Definice uživatelského typu. Uživatelem definované typy. Součinové datové typy. Součtové datové typy. FLP - Uživatelem definované typy

Přednáška 3. Rekurze 1

IB111 Programování a algoritmizace. Objektově orientované programování (OOP)

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

Programování v Pythonu

IB111 Úvod do programování skrze Python

Použití. Způsob použití. extensions [array] extensions [table] extensions [array table] Rozšíření o pole a tabulky 1

FUNKCIONÁLNÍ A LOGICKÉ PROGRAMOVÁNÍ 5. CVIČENÍ

Abstraktní datové typy

Databáze. Velmi stručný a zjednodušený úvod do problematiky databází pro programátory v Pythonu. Bedřich Košata

Programování v C++, 2. cvičení

Programování v jazyce JavaScript

ALG 09. Radix sort (přihrádkové řazení) Counting sort. Přehled asymptotických rychlostí jednotlivých řazení. Ilustrační experiment řazení

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

Šablonovací systém htmltmpl vypracoval: Michal Vajbar, Šablonovací systém htmltmpl

Programujeme v softwaru Statistica - příklady

Programování v jazyce JavaScript

IB015 Neimperativní programování. Seznamy, Typy a Rekurze. Jiří Barnat Libor Škarvada

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

Základy PERLu snadno a rychle

MQL4 COURSE. By Coders guru -5 Smyčky & Rozhodnutí Část 2

Stromy. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol.

Návrh a tvorba WWW stránek 1/14. PHP a databáze

Programovací í jazyk Haskell

IB111 Základy programování Radek Pelánek

Mělká a hluboká kopie

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 10.4.

Úvod do databázových systémů

Programování v C++ Úplnej úvod. Peta (maj@arcig.cz, SPR AG )

Každý datový objekt Pythonu má minimáln ti vlastnosti. Identitu, datový typ a hodnotu.

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

Algoritmizace a programování

Empty, Null, Nothing, Missing, prázdný řetězec a buňka

Programování v jazyce JavaScript

IB015 Neimperativní programování. Časová složitost, Typové třídy, Moduly. Jiří Barnat Libor Škarvada

JavaScript 101. "Trocha života do statických stránek"

Spojový seznam. Jan Kybic.

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

Jazyk C# a platforma.net

DATABÁZOVÉ A INFORMAČNÍ SYSTÉMY

ČVUT FIT: BI-SKJ: Perl

Algoritmizace a programování

Pole a kolekce. v C#, Javě a C++

Pole, množina, tabulka

Motivace. Vstup a výstup. Minimální komunikace. Motivace. ÚDPJ - Vstup a výstup. Ing. Lumír Návrat katedra informatiky, A

Programovací jazyk Haskell

Úvod do programování 6. hodina

5. Vyhledávání a řazení 1

[APLIKACE PRO PŘEHRÁVÁNÍ VIDEA - PROJEKT MIAMI - SERVEROVÁ ČÁST]

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

Úvod do programovacích jazyků (Java)

Operátory ROLLUP a CUBE

NPRG030 Programování I, 2017/18 1 / :22:16

Algoritmizace řazení Bubble Sort

Upozornění: Dne:

Konstruktory a destruktory

(a kryptografické odbočky) IB111 Úvod do programování skrze Python

Prolog PROgramming in LOGic část predikátové logiky prvního řádu rozvoj začíná po roce 1970 Robert Kowalski teoretické základy Alain Colmerauer, David

školní vzdělávací program ŠKOLNÍ VZDĚLÁVACÍ PROGRAM DR. J. PEKAŘE V MLADÉ BOLESLAVI RVP G 8-leté gymnázium Latina Gymnázium Dr.


IB111 Základy programování Radek Pelánek

Transkript:

ƒeské vysoké u ení technické v Praze FIT Programování v Pythonu Ji í Znamená ek P íprava studijního programu Informatika je podporována projektem nancovaným z Evropského sociálního fondu a rozpo tu hlavního m sta Prahy. Praha & EU: Investujeme do va²í budoucnosti

Python (2011-03-10) : Slovníky 1 of 10 Python Slovníky Úvod Slovníky jsou nejdůležitějším (a po dlouhou dobu také jediným) zástupcem tzv. mapovacích typů. Jejich struktura je následující: slovník = { KLÍČ1: HODNOTA1, KLÍČ2: HODNOTA2, } Přitom jak je v Python'u zvykem jak hodnoty, tak klíče mohou být najednou nejrůznějších typů. Přesněji hodnotou může být cokoliv, klíč však musí být neměnný datový typ (immutable). Typicky se indexuje řetězcem nebo číslem, ale stejně tak dobře můžete použít například právě n-tici, pokud se sama skládá z neměnných typů. Nejsnadněji (bez využití jiné datové struktury a speciálních metod) slovník vytvoříme přímou notací: = { 'a': 1, 'b': [1,2,3], 'c': "ahoj", } >>> type(ds) <class 'dict'> {'a': 1, 'c': 'ahoj', 'b': [1, 2, 3]} Základní vlastnosti Ačkoli slovníky nepatří mezi sekvence, některé z vlastností mají díky své struktuře balíků na hodnoty společné:

Python (2011-03-10) : Slovníky 2 of 10 = { 'a': 1, 'b': [1,2,3], 'c': "ahoj", } # dotaz na počet dvojic klíč-hodnota >>> len(ds) 3 # dotaz na výskyt klíče >>> 'a' in ds True >>> 123 in ds False # přirozený cyklus přes klíče slovníku >>> for key in ds: print(key) a c b # dotaz na hodnotu odpovídající klíči 'b' >>> d['b'] [1, 2, 3] Přístup k prvkům Existují dva základní způsoby jak přistupovat k prvkům slovníku: známe-li klíč, můžeme pomocí něj získat odpovídající hodnotu (viz slovník[klíč] z předchozího slajdu) pomocí smyčky přes vybraný pohled na slovník probrat prvky slovníku jeden po druhém (ovšem s víceméně náhodným pořadím) Co se pohledů (views) na slovník (označme ho ds) týká, jsou tři různé: 1. 2. 3. ds.keys() pohled přes klíče ds.values() pohled přes hodnoty ds.items() pohled přes n-tice (klíč, hodnota) a sdílejí stejné vlastnosti:

Python (2011-03-10) : Slovníky 3 of 10 každého pohledu se můžeme zeptat na počet jeho členů pomocí funkce len() přes každý pohled můžeme iterovat (např. pomocí smyčky for in) každý pohled můžeme testovat na přítomnost prvků pomocí operátoru in I. Pohled přes klíče je pohledem základním a vlastně jsme ho viděli v akci už na předchozím slajdu. Je totiž: = { 'a': 1, 'b': [1,2,3], 'c': "ahoj", }.keys() dict_keys(['a', 'c', 'b']) >>> len( ds.keys() ) 3 >>> 'a' in ds.keys() True >>> for key in ds.keys(): print(key) a c b II. Pohled přes hodnoty je doplňkovým k pohledu přes klíče:

Python (2011-03-10) : Slovníky 4 of 10 = { 'a': 1, 'b': [1,2,3], 'c': "ahoj", }.values() dict_values([1, 'ahoj', [1, 2, 3]]) >>> len( ds.values() ) 3 >>> 'ahoj' in ds.values() True >>> for val in ds.values(): print(val) 1 ahoj [1, 2, 3] III. Posledním a nejúplnějším pohledem na slovník je pohled přes páry klíč-hodnota: = { 'a': 1, 'b': [1,2,3], 'c': "ahoj", }.items() dict_items([('a', 1), ('c', 'ahoj'), ('b', [1, 2, 3])]) >>> len( ds.items() ) 3 >>> ('a', 1) in ds.items() True >>> for (key, val) in ds.items(): print(key, val) a 1 c ahoj b [1, 2, 3]

Python (2011-03-10) : Slovníky 5 of 10 Základní práce se slovníky Pro nejběžnější práci se slovníky si vystačíme s několika základními triky : IV. Novou dvojici klíč-hodnota přidáme do slovníku velmi podobným způsobem, jako se ptáme na existující: {'a': 1, 'c': 'ahoj', 'b': [1, 2, 3]} ['d'] = (1, 2,) {'a': 1, 'c': 'ahoj', 'b': [1, 2, 3], 'd': (1, 2)} V. Pokud provedeme totéž pro již existující klíč, dojde k nahrazení jeho hodnoty: {'a': 1, 'c': 'ahoj', 'b': [1, 2, 3], 'd': (1, 2)} ['d'] = 'svět' {'a': 1, 'c': 'ahoj', 'b': [1, 2, 3], 'd': 'svět'} VI. Již nepotřebné dvojce klíč-hodnota se zbavíme pomocí univerzálního del: {'a': 1, 'c': 'ahoj', 'b': [1, 2, 3], 'd': 'svět'} >>> del ds['d'] {'a': 1, 'c': 'ahoj', 'b': [1, 2, 3]} VII. Počáteční slovník můžeme vytvořit buď ručně.. = { 'a': 1, 'b': [1,2,3], 'c': "ahoj", } {'a': 1, 'c': 'ahoj', 'b': [1, 2, 3]}..nebo z vhodné datové struktury pomocí funkce/konstrukturu dict(): = dict( [('a', 1), ('b', [1, 2, 3]), ('c', 'ahoj')] ) {'a': 1, 'c': 'ahoj', 'b': [1, 2, 3]}

Python (2011-03-10) : Slovníky 6 of 10 Mimochodem prázdný slovník zavedeme také buď pomocí dict() nebo přímou notací: = {} {} >>> type(ds) <class 'dict'> [123] = 'ahoj' {123: 'ahoj'} A ještě znovu upozorním na to, že ani klíče nemusí být stejného typu: = { 'a': 'ahoj', 123: 'svět', (12, 'fokus'): 666, } {'a': 'ahoj', (12, 'fokus'): 666, 123: 'svět'} ['a'] 'ahoj' [123] 'svět' [ (12, 'fokus') ] 666 Pomocné metody Metody z předchozího slajdu vám dost pravděpodobně vystačí skoro na všechno, co kdy budete kolem slovníků potřebovat. Ale slovníky navíc poskytují spoustu užitečných dalších metod: VIII. Do slovníku můžeme přidat více dvojic klíč-hodnota najednou pomocí metody update(slovník): = {} {}.update( {'a': 1, 'b': [1, 2, 3]} ) {'a': 1, 'b': [1, 2, 3]} Podobně jako u tvorby slovníku však parametrem může být i jiná vhodná datová struktura:

Python (2011-03-10) : Slovníky 7 of 10.update( [('c', 'ahoj'), (666, 'lokus')] ) {'a': 1, 'c': 'ahoj', 'b': [1, 2, 3], 666: 'lokus'} IX. Jelikož dotaz na neexistující klíč vrátí výjimku KeyError.. {'a': 1, 'c': 'ahoj', 'b': [1, 2, 3], 666: 'lokus'} ['d'] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'd'..měli bychom před každým dotazem kontrolovat, zda příslušný klíč ve slovníku vůbec je (nebo odchytávat výjimku a zachovat se podle toho). S pomocí metody get(klíč[, výchozí_hodnota]) se to však dá zjednodušit: >>> x = ds.get('c') >>> x 'ahoj' >>> x = ds.get('d') >>> x >>> x = ds.get('d', 0) >>> x 0 X. Trochu podobná a poněkud kriptická metoda setdefault(key[, default]) pro existující klíč vrací jeho hodnotu, pro neexistující ho ve slovníku zavede (s hodnotou default nebo výchozím None): >>> x = ds.setdefault('c') >>> x 'ahoj' >>> x = ds.setdefault(123, 777) >>> x 777 {'a': 1, 123: 777, 'c': 'ahoj', 'b': [1, 2, 3], 666: 'lokus'} XI. Slovník můžete smazat pomocí jeho metody clear():

Python (2011-03-10) : Slovníky 8 of 10.clear() {} XII. Tvorbu slovníku s výchozí hodnotou nám může často usnadnit metoda fromkeys(seq[, value]), která zavede slovník s klíči ze sekvence seq a případnou výchozí hodnotou default (jinak None): = {}.fromkeys( range(4), '' ) {0: '', 1: '', 2: '', 3: ''} XIII. Slovník můžeme také prvek po prvku zničit. K dispozici jsou na to dvě různé metody. První z nich, pop(key[, default]), odstraní prvek s klíčem key a vrátí jeho hodnotu (nebo default): = { 'a': 'ahoj', 123: 'svět', (12, 'fokus'): 666, } {'a': 'ahoj', (12, 'fokus'): 666, 123: 'svět'}.pop('a') 'ahoj' {(12, 'fokus'): 666, 123: 'svět'} V podobném duchu operuje metoda popitem(), která ovšem vrací dvojici (klíč, hodnota) a navíc v náhodném pořadí (vhodné pro množinové operace): = { 'a': 'ahoj', 123: 'svět', (12, 'fokus'): 666, } {'a': 'ahoj', (12, 'fokus'): 666, 123: 'svět'}.popitem() ('a', 'ahoj') XIV. Jako jedna z mála datových struktur nabízí slovník i vlastní metodu pro tvorbu mělké kopie: copy() Řazení Ve výchozím stavu prochází cyklus prvky slovníku v náhodném pořadí:

Python (2011-03-10) : Slovníky 9 of 10 = { 'a': 1, 'b': [1,2,3], 'c': "ahoj", } >>> for key in ds: print(key) a c b Pomocí zabudované funkce sorted() si ale můžeme aktuální průchod pro navzájem porovnatelné klíče vynutit seřazený: = { 'a': 1, 'b': [1,2,3], 'c': "ahoj", } >>> for key in sorted(ds): print(key) a b c Generátorová notace Python 3 rozšířil generátorovou notaci dostupnou dříve pouze u seznamů na další dva typy. A jedním z nich je právě slovník. Obecný konstruktor vypadá velmi podobně, jako u seznamu: { KLÍČ:HODNOTA for I in SEKVENCE [if PODMÍNKA] } XV. Lepší radši rovnou příklad jak dosáhnout stejného výsledku jako metoda fromkeys: >>> { i:'' for i in range(4) } {0: '', 1: '', 2: '', 3: ''} XVI. A něco složitějšího: >>> xs = "Ahoj, světe!" >>> { i:x for (i, x) in enumerate(xs) } {0: 'A', 1: 'h', 2: 'o', 3: 'j', 4: ',', 5: ' ', 6: 's', 7: 'v', 8

Python (2011-03-10) : Slovníky 10 of 10 >>> xs = "Abcd abcd" >>> { x:ord(x) for (i, x) in enumerate(xs) } {'A': 65, ' ': 32, 'c': 99, 'b': 98, 'd': 100, 'a': 97}