1 of 27

Úvod do programování v Pythonu

Python - datové typy pokračování

Anastázie a Filip Sedlákovi

2 of 27

Funkce a metody

  • Všechny metody jsou funkce, ale ne všechny funkce jsou metody
  • Metody jsou funkce pro určitou třídu objektů (např. řetězce)
  • Volání funkce
    • funkce(parametry)
    • len('python')
  • Volání metody
    • objekt.metoda(parametry)
    • 'python'.count('n')

3 of 27

Seznam (list)

  • Složený datový typ
    • Skládá se z menších částic (řetězce, čísla, jiné seznamy)

  • Stejné indexování jako u řetězce

>>> my_list = ['banana', 42, 'Nasťa', ['a', 'b']]

>>> type(my_list)

<class 'list'>

>>> nucl = 'ACGT'

>>> list(nucl)

['A', 'C', 'G', 'T']

4 of 27

Seznam (list)

  • Seznamy jsou měnitelné
    • Na rozdíl od řetězců, jednotlivé položky lze měnit

>>> my_list[3] = 'apple'

>>> my_list

['banana', 42, 'Nasťa', 'apple']

>>> name = 'Nasta'

>>> name[0] = 'C'

Traceback (most recent call last):

File "<ipython-input-9-69728e5ccb1f>", line 1, in <module>

name[0] = 'C'

TypeError: 'str' object does not support item assignment

5 of 27

Operace se seznamy

  • Určení délky seznamu

>>> numbers = ['one', 'two', 'three', 'four']

>>> len(numbers)

4

  • Výběr částí seznamu

>>> numbers[0::2]

['one', 'three']

>>> numbers[-1]

'four'

6 of 27

Operace se seznamy

  • Sčítání seznamů

>>> my_list + numbers

['banana', 42, 'Nasťa', 'apple', 'one', 'two', 'three', 'four']

  • Násobení seznamů

>>> ['GCC']*3

['GCC', 'GCC', 'GCC']

  • Připojování prvků

>>> numbers.append('five')

>>> numbers

['one', 'two', 'three', 'four', 'five']

7 of 27

Operace se seznamy

  • Mazaní položek

>>> del numbers[1]

>>> numbers

['one', 'three', 'four', 'five']

  • Seřazení prvků

>>> fruits = ['banana','apple', 'mango', 'kiwi']

>>> fruits.sort()

>>> print(fruits)

['apple', 'banana', 'kiwi', 'mango']

  • A další metody, např. ve tvaru list.metoda()

>>> dir(list)

[..., 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

8 of 27

Cvičení

  • Vytvořte seznam koníčku pomocí postupného přidávání položek do prázdného seznamu dle oblíbenosti (první nejvíce, poslední nejméně)
  • Vytiskněte svůj nejoblíbenější koníček
  • Vytiskněte svůj nejméně oblíbený koníček
  • Vymažte ho ze seznamu

9 of 27

Cvičení

  • Máte seznam měst seřazených dle počtu obyvatel
    • cities = ['Praha','Brno', 'Ostrava', 'Plzen', 'Liberec', 'Olomouc', 'Usti nad Labem', 'Hradec Kralove', 'Ceské Budejovice', 'Pardubice']
  • Seřaďte města abecedně
  • Pomocí příkazu "".join() spojte města do jednoho řetězce oddělené hvězdičkou (*)

10 of 27

Množina (set)

  • Množina je měnitelný soubor rozdílných (neopakujících se) prvků
    • Vytvoří se pomocí složených závorek

>>> basket = {'apple','orange','apple','pear','orange','banana'}

>>> basket

{'apple', 'banana', 'orange', 'pear'}

>>> type(basket)

<class 'set'>

    • Nebo pomocí funkce set()

>>> set('Nasťa')

{'N', 'ť', 'a', 's'}

11 of 27

Množina (set)

  • Množina je měnitelný soubor rozdílných (neopakujících se) prvků

>>> basket = {'apple','orange','apple','pear','orange','banana'}

>>> basket

{'apple', 'banana', 'orange', 'pear'}

  • Množina není indexovaná

>>> basket[0]

Traceback (most recent call last):

File "<ipython-input-7-0ed6bd42dd11>", line 1, in <module>

basket[0]

TypeError: 'set' object does not support indexing

12 of 27

Množina (set)

>>> my_friends = set(['Lenka', 'Hana', 'Veronika'])

>>> your_friends = set(['Jana', 'Olga', 'Hana'])

>>> my_friends.intersection(your_friends)

{'Hana'}

>>> my_friends.difference(your_friends)

{'Lenka', 'Veronika'}

>>> your_friends.difference(my_friends)

{'Jana', 'Olga'}

13 of 27

Slovník (dictionary)

  • Složený datový typ, ale každý prvek se skládá z dvojice klíč:hodnota (key:value)

>>> info = {'name':'Nasťa', 'dog': 'Miky'}

>>> type(info)

dict

  • Klíčem může být neměnitelný datový typ, hodnotou libovolný datový typ

>>> info = {['name', 'first']:'Nasta'}

Traceback (most recent call last):

File "<ipython-input-16-7ab66cffb746>", line 1, in <module>

info = {['name', 'first']:'Nasta'}

TypeError: unhashable type: 'list'

14 of 27

Přístup k hodnotám ve slovníku

  • dict[‘key’]

>>> info['name']

'Nasta'

>>> info.values()

dict_values(['Miky', 'Nasta'])

>>> info.keys()

dict_keys(['dog', 'name'])

  • Klíče se nemohou opakovat

>>> info = {'name': 'Nasta', 'dog': 'Miky', 'name': 'Julie', 'dog': 'Rex'}

>>> info['name']

'Julie'

15 of 27

Operace se slovníky

  • Přiřazení hodnoty

>>> info['color'] = 'blue'

>>> info

{'color': 'blue', 'dog': 'Miky', 'name': 'Nasta'}

  • Vypisování dvojic klíč - hodnota

>>> info.items()

dict_items([('color', 'blue'), ('dog', 'Miky'), ('name', 'Nasta')])

16 of 27

Operace se slovníky

  • Vypisování klíčů

>>> info.keys()

dict_keys({'color', 'dog', 'name'})

  • Vypisování hodnot

>>> info.values()

dict_values([ 'blue', 'Miky', 'Nasta'])

17 of 27

Operace se slovníky

  • Smazání dvojice

>>>del info['name']

>>>info

{'color': 'blue', 'dog': 'Miky'}

  • Další metody

>>> dir(dict)

[..., 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']

18 of 27

Jak vytvořit...

  • Řetězec
    • name = 'Nasťa'
  • Seznam
    • stuff = [42, 'dog', ['drawing', 'running', 'reading']']
  • Množina
    • fruits = {'apples, 'banana', 'pears'}
  • Slovník
    • phonebook = {'Lenka': 700523698, 'Jitka': 563412789}

19 of 27

Cvičení

alphabet = 'abcdefghijklmnopqrstuvwxyz'

zen = """

Beautiful is better than ugly.

Explicit is better than implicit.

Simple is better than complex.

Complex is better than complicated.

Flat is better than nested.

Sparse is better than dense.

Readability counts.

Special cases aren't special enough to break the rules.

Although practicality beats purity.

Errors should never pass silently.

Unless explicitly silenced.

In the face of ambiguity, refuse the temptation to guess.

There should be one-- and preferably only one --obvious way to do it.

Although that way may not be obvious at first unless you're Dutch.

Now is better than never.

Although never is often better than *right* now.

If the implementation is hard to explain, it's a bad idea.

If the implementation is easy to explain, it may be a good idea.

Namespaces are one honking great idea -- let's do more of those!

"""

  • Najděte, která písmena se nevyskytují v Zen of Python https://www.python.org/dev/peps/pep-0020/#id3
  • Nápověda: zkuste použít set()

20 of 27

Cvičení

  • Opravte slovník a vymažte chybný klíč
    • d = {'pajton':'Vysokoúrovňový skriptovací programovací jazyk'}

21 of 27

Cykly - for

  • Používají se pro opakované provádění řady příkazů
  • Cyklus for prochází jednotlivé položky iterovaného objektu, který je uveden za klíčovým slovem in
  • Iterovaným objektem může být např. seznam, entice, řetězec a slovník
  • Položky iterovaného objektu se postupně ukládají do proměnné uvedené za klíčovým slovem for a provede se s nimi tělo bloku, který začíná za dvojtečkou

for i in iterovany_objekt:� telo bloku� telo bloku

22 of 27

Cykly - for

>>> word = 'python'

>>> for letter in word:

... print(letter)

p

y

t

h

o

n

23 of 27

Cykly - for

>>> fruits = ['jablka', 'hrušky', 'meruňky', 'broskve', 'pomeranče']

>>> for fruit in fruits:

... print('Mám ráda ' + fruit)

Mám ráda jablka

Mám ráda hrušky

Mám ráda meruňky

Mám ráda broskve

Mám ráda pomeranče

24 of 27

Cykly - for

>>> fruits = ['jablka', 'hrušky', 'meruňky', 'broskve', 'pomeranče']

>>> for i in range(len(fruits)):

... print('Mám ráda ' + fruits[i])

Mám ráda jablka

Mám ráda hrušky

Mám ráda meruňky

Mám ráda broskve

Mám ráda pomeranče

25 of 27

Iterace slovníkem

>>> kids = {'Sedlák': 'David', 'Iohanescu': 'Julie'}

>>> for key, value in kids.items():

... print(value, key)

David Sedlák

Julie Iohanescu

26 of 27

Odsazení (indentation)

>>> for key, value in kids.item():

... print(value, key)

File "<ipython-input-37-38507da79ee2>", line 2

print(value, key)

^

IndentationError: expected an indented block

27 of 27

Domací úkol

  • U sebe na počítači vytvořte Jupyter notebook 'python2'
  • Úkol 1
    • Pomocí cyklu udělejte ze slovníku větvený seznam
    • fruits = {'banana':3,'apple':2, 'mango':1, 'kiwi':5}
    • fruits_list = [['banana', 'banana', 'banana'], ['apple', 'apple'], ['mango'], ['kiwi', 'kiwi', 'kiwi', 'kiwi', 'kiwi']]
  • Úkol 2
    • Vyberte ze seznamu nejkratší prvek
    • fruits = ['banana','apple', 'mango', 'kiwi']
    • shortest_fruit = 'kiwi'
  • Jupyter notebook nahrajte na GitHub a pošlete emailem odkaz na něj nejpozději do 14. 11. 2017 11:00 CET