51

PyTraning 2.0 #5: Ssssssssss jak słowniki

Embed Size (px)

Citation preview

Page 1: PyTraning 2.0 #5: Ssssssssss jak słowniki
Page 2: PyTraning 2.0 #5: Ssssssssss jak słowniki

PyTraning2.0 #5:Ssssssssss jak słowniki..

Słowniki, pętle

Page 3: PyTraning 2.0 #5: Ssssssssss jak słowniki

user_38251

9feSI6ru3na

Page 4: PyTraning 2.0 #5: Ssssssssss jak słowniki

Zadanie 1

Jakie typy danych tu widzimy?

Dzieci: Ania, Marcin, Sebastian, Weronika, Maks, Zbyszek, Marysia, Kasia

Prezenty: Klocki Lego, Gra planszowa, Książka, Ciepłe skarpety, Tablet, Sweter, Sweter, Rózga

Miasta: Poznań, Kraków, Bielsko Biała

Liczba prezentów: (5, 2, 1)

Czy grzeczne? [True, False, True,

True, False, True, True, True]

Page 5: PyTraning 2.0 #5: Ssssssssss jak słowniki

Typy danych

Typy proste• Całkowity (int)

• Zmiennopozycyjny (float)• Tesktowy (str) • Logiczny (bool)

• Zespolony (complex)

Typy strukturalne • Lista (list)

• Krotka (tuple) • Zbiór (set)

• Słownik, tabela (dict)

Page 6: PyTraning 2.0 #5: Ssssssssss jak słowniki

Typy danych

Typy proste• Całkowity (int)

• Zmiennopozycyjny (float)• Tesktowy (str) • Logiczny (bool)

• Zespolony (complex)

Typy strukturalne • Lista (list)

• Krotka (tuple) • Zbiór (set)

• Słownik, tabela (dict)

Page 7: PyTraning 2.0 #5: Ssssssssss jak słowniki

li = [5,2,1]

li.count(0) li[2]

li.pop()

li[1:-1]

len(li)

2 in li

li.append('A') li.sort()

Przypomnienie

Page 8: PyTraning 2.0 #5: Ssssssssss jak słowniki

a == [1,3,4]

a = [1,3,4,5]

a == [1,3,4,5,3]

a == [3,5,4,3,1]

a == [3,4,3,1]

a == [1,3,3,4]

a == [1,3,3,4,4]

Przypomnienie

1) a.reverse()

2) a.sort()

3) a.pop()

4) a.append(4)

5) a = a + [5,3]

6) a.remove(5)

3)

5)

1)

6)

2)

4

Page 9: PyTraning 2.0 #5: Ssssssssss jak słowniki

a == [1,3,4]

a = [1,3,4,5]

a == [1,3,4,5,3]

a == [3,5,4,3,1]

a == [3,4,3,1]

a == [1,3,3,4]

a == [1,3,3,4,4]

Przypomnienie

1) a.reverse()

2) a.sort()

3) a.pop()

4) a.append(4)

5) a = a + [5,3]

6) a.remove(5)

3)

5)

1)

6)

2)

4

Page 10: PyTraning 2.0 #5: Ssssssssss jak słowniki

a == ['A','B','B','c',None,3]

a = ['A','B','c',None,3]

a == ['B','c',None]

a == ['c','c']

a == ['c','c','c']

a == ['c','c']

1) a = a[2:5]

2) a = [a[-2]] +

[a[1]]

3) a = a[:2]

4) a = [a[-1]]*3

5) a = a[:2] + a[1:]

Przypomnienie

5)

1)

2)

4)

3)

Page 11: PyTraning 2.0 #5: Ssssssssss jak słowniki

a == ['A','B','B','c',None,3]

a = ['A','B','c',None,3]

a == ['B','c',None]

a == ['c','c']

a == ['c','c','c']

a == ['c','c']

1) a = a[2:5]

2) a = [a[-2]] +

[a[1]]

3) a = a[:2]

4) a = [a[-1]]*3

5) a = a[:2] + a[1:]

Przypomnienie

5)

1)

2)

4)

3)

Page 12: PyTraning 2.0 #5: Ssssssssss jak słowniki

Zadanie 2 – listy, krotki -powtórka

Pomóż PyMikołajowi zrobić unikatową listę prezentów w porządku alfabetycznym i rozdziel ją

później na dwie krotki o równej wielkości.prezenty = ['Domek dla lalek','Tablet','Rozga','Rower','Tablet','Ksiazka','Telefon',

'Pilka','Sweter','Ksiazka','Bilet do kina','Gra planszowa','Xbox','Gra komputerowa',

'Szalik','Slodycze','Mis pluszowy','Pizama','Tablet','Telefon','Ksiazka','Klawiatura',

'Zestaw do szycia','Zestaw do malowania','Maly majsterkowicz','Maly chemik','Lalka Barbie',

'Lyzwy','Klocki Lego','Samochodziki','Film','Slodycze','Szczeniak','Sweter','Narty']

dzieci = ['Ania P','Irek','Tadek','Marcin K','Karolina','Romek','Wiktoria','Witek',

'Pawel','Dominika','Marcin M','Blazej','Ania J','Grzegorz','Agnieszka','Marcelina',

'Klaudia','Marta','Piotr','Gosia','Kasia L','Kasia K','Tytus','Maja','Tymon','Marcin W',

'Robert','Zosia','Magda','Julia','Bartek','Andrzej','Zbyszek','Edek']

Page 13: PyTraning 2.0 #5: Ssssssssss jak słowniki

Zadanie 2 – listy, krotki -powtórka

Pomóż PyMikołajowi zrobić unikatową listę prezentów w porządku alfabetycznym i rozdziel ją

później na dwie krotki o równej wielkości.

>>> unikatowe_prezenty = set(prezenty)

>>> len(unikatowe_prezenty)

28

>>> unikatowe_prezenty = tuple(unikatowe_prezenty)

>>> unikatowe_prezenty.sort()

>>> unikatowe_prezenty_1 = unikatowe_prezenty[14:]

>>> unikatowe_prezenty_2 = unikatowe_prezenty[:14]

>>> print(unikatowe_prezenty, unikatowe_prezenty_1 ,

unikatowe_prezenty_2)

Page 14: PyTraning 2.0 #5: Ssssssssss jak słowniki

Zadanie 2 – listy, krotki -powtórka

Pomóż PyMikołajowi zrobić unikatową listę prezentów w porządku alfabetycznym i rozdziel ją

później na dwie krotki o równej wielkości.

>>> unikatowe_prezenty = set(prezenty)

>>> len(unikatowe_prezenty)

28

>>> unikatowe_prezenty = tuple(unikatowe_prezenty)

>>> unikatowe_prezenty.sort()

>>> unikatowe_prezenty_1 = unikatowe_prezenty[14:]

>>> unikatowe_prezenty_2 = unikatowe_prezenty[:14]

>>> print(unikatowe_prezenty, unikatowe_prezenty_1 ,

unikatowe_prezenty_2)

>>> unikatowe_prezenty = tuple(sorted(set(prezenty)))

Te trzy komendy można zapisać w jednej linijce

Page 15: PyTraning 2.0 #5: Ssssssssss jak słowniki

Typy danych

Typy proste• Całkowity (int)

• Zmiennopozycyjny (float)• Tesktowy (str) • Logiczny (bool)

• Zespolony (complex)

Typy strukturalne • Lista (list)

• Krotka (tuple) • Zbiór (set)

• Słownik, tabela (dict)

Page 16: PyTraning 2.0 #5: Ssssssssss jak słowniki

Słowniki Zmienny (modyfikowalny), nieposortowany zestaw par

klucz:wartość Wartością może być dowolny obiekt Pythonowy.

Słownik nie jest sekwencją, gdyż w sekwencji istnieje porządek, a słownik są nieuporządkowane

Indeksem słownika jest klucz - kluczem, może być dowolny niezmienny typ.

Klucze: liczby, stringi, krotka – wyłącznie, jeśli każdy jej element jest typem niezmiennym

Lista za to nie może stanowić klucza w słowniku ponieważ jest typem zmiennym.

Page 17: PyTraning 2.0 #5: Ssssssssss jak słowniki

Słowniki Słownik tworzymy umieszczając klucz:wartość w

nawiasach klamrowych

nowy_dict = {klucz1:wartość1, klucz2:wartoość2, klucz3:wartość3}

Pusty słownik – pusty_dict = {}

do pustego słownika możemy dodawać elementy: pusty_dict[klucz]=wartosc

klucze muszą być unikatowe, chyba, że chcemy nadpisać wartość dla danego klucza

>>> nowy_dict = {klucz1:wartość1, klucz2:wartość2,

klucz3:wartość3}

Page 18: PyTraning 2.0 #5: Ssssssssss jak słowniki

Słowniki – metody i funkcje>>> slownik = {}

>>> dir(slownik)

['__class__', '__contains__', '__delattr__', '__delitem__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']

>>> del slownik[klucz]

>>> len(slownik)

>>> help(slownik)

>>> help(slownik.update)

Page 19: PyTraning 2.0 #5: Ssssssssss jak słowniki

Stwórz słownik składający się z dwóch par klucz:wartość – np. imię dziecka i prezent.

Następnie wyświetl prezenty dla dzieci. Dodaj nową parę dziecko:prezent.

Zadanie 3

Page 20: PyTraning 2.0 #5: Ssssssssss jak słowniki

Stwórz słownik składający się z dwóch par klucz:wartość – np. imię dziecka i prezent.

Następnie wyświetl prezenty dla dzieci. Dodaj nową parę dziecko:prezent.

Zadanie 3

>>> prezenty_dla_dzieci = {'Kasia':'Mis pluszowy',

'Andrzej':'Tablet'}

>>> print(prezenty_dla_dzieci['Kasia'])

Mis pluszowy

>>> print(prezenty_dla_dzieci['Andrzej']

Tablet

>>> prezenty_dla_dzieci['Michal']='Telefon'

>>> prezenty_dla_dzieci.update({'Karol':'Gra planszowa'})

Page 21: PyTraning 2.0 #5: Ssssssssss jak słowniki

Pętle służą do powtarzania czynności

Budowa pętli:

Dla czegoś w zbiorze:

zrób określoną czynność

for sth in list/tuple/set/string/range:

do_sth(sth)

Pętle - For

Page 22: PyTraning 2.0 #5: Ssssssssss jak słowniki

Pętle - For

Page 23: PyTraning 2.0 #5: Ssssssssss jak słowniki

Pętle - For

Page 24: PyTraning 2.0 #5: Ssssssssss jak słowniki

Pętle - For

Page 25: PyTraning 2.0 #5: Ssssssssss jak słowniki

Pętle - For

Page 26: PyTraning 2.0 #5: Ssssssssss jak słowniki

Zadanie 4

Narysuj choinkę według poniższych instrukcji (zapisz instrukcje w pliku choinka.py i go odpal):

tree_element = ' * '

print(tree_element)

tree_element = ' *** '

print(tree_element)

tree_element = ' ***** '

print(tree_element)

tree_element = '*******'

print(tree_element)

Page 27: PyTraning 2.0 #5: Ssssssssss jak słowniki

Zadanie 5

Teraz narysuj choinkę używając pętli for i poniższej listy:

choinka = [' * ', ' *** ', ' ***** ', '*******']

Page 28: PyTraning 2.0 #5: Ssssssssss jak słowniki

Zadanie 5

Teraz narysuj choinkę używając pętli for i poniższej listy:

choinka = [' * ', ' *** ', ' ***** ', '*******']

for tree_element in choinka:

print(tree_element)

Page 29: PyTraning 2.0 #5: Ssssssssss jak słowniki

Zadanie 6

Pomóż Mikołajowi wyświetlić po kolei na ekranie wszystkie unikatowe prezenty z pierwszej tupliprezentów razem z ich indeksem w tejże tupli.

Page 30: PyTraning 2.0 #5: Ssssssssss jak słowniki

Zadanie 6

Rower 0

Tablet 1

Zestaw do szycia 2

Szczeniak 3

Szalik 4

Lalka Barbie 5

Pizama 6

Narty 7

Lyzwy 8

Bilet do kina 9

Domek dla lalek 10

Rozga 11

Sweter 12

Samochodziki 13

>>> counter = 0

>>> for prezent in unikatowe_prezenty_1:

print(prezent, n)

n += 1

Definiujemy licznik, który będzie nam liczył kolejne przejścia pętli for. Pętla for idzie po kolei po każdym elemencie podanej sekwencji (np. lista/tupla/string/w słowniku po kluczach), dlatego też każde przejście pętli może nam wskazać, na którym elemencie obecnie jesteśmy. Należy pamiętać, że w Pythonie pierwszy indeks jest 0, więc definiujemy licznik jako 0 i na końcu pętli go zwiększamy, czyli liczymy, która pętla się skończyła –przechodzimy do następnego elementu – obecnie counterma już wartość 1, co odpowiada indeksowi kolejnego elementu. I tak do końca sekwencji.

Page 31: PyTraning 2.0 #5: Ssssssssss jak słowniki

Zadanie 6

Rower 0

Tablet 1

Zestaw do szycia 2

Szczeniak 3

Szalik 4

Lalka Barbie 5

Pizama 6

Narty 7

Lyzwy 8

Bilet do kina 9

Domek dla lalek 10

Rozga 11

Sweter 12

Samochodziki 13

>>> for index in range(len(unikatowe_prezenty_1)):

print(unikatowe_prezenty_1[index], index)

Definiujemy zakres indeksów wpierw -> for numer in range() – jako rangepodajemy zakres jaki chcemy brać pod uwagę – w tym przypadku długość naszej sekwencji (tutaj listy). Idziemy po kolei po indeksach i z ich użyciem wywołujemy elementy listy (lista[index]).

Page 32: PyTraning 2.0 #5: Ssssssssss jak słowniki

Zadanie 6

Rower 0

Tablet 1

Zestaw do szycia 2

Szczeniak 3

Szalik 4

Lalka Barbie 5

Pizama 6

Narty 7

Lyzwy 8

Bilet do kina 9

Domek dla lalek 10

Rozga 11

Sweter 12

Samochodziki 13

>>> for index, prezent in enumerate(unikatowe_prezenty_1):

print(prezent, index)

enumerate() to funkcja, która zwraca tuple w postaci (counter, element) – u nas jest to index i prezent. Jeśli zrobimy:

for el in enumerate(list):print el

To zobaczymy:(0, element_listy_0)(1, element_listy_1)….(n, element_listy_n)

W tej pętli do indexu i prezentu przypisujemy adekwatnie 0 i 1 element tupli.

Page 33: PyTraning 2.0 #5: Ssssssssss jak słowniki

Zadanie 6

Rower 0

Tablet 1

Zestaw do szycia 2

Szczeniak 3

Szalik 4

Lalka Barbie 5

Pizama 6

Narty 7

Lyzwy 8

Bilet do kina 9

Domek dla lalek 10

Rozga 11

Sweter 12

Samochodziki 13

>>> for prezent in unikatowe_prezenty_1:

print(prezent, unikatowe_prezenty.index(prezent))

lista.index(element) zwraca indeks pierwszego obiektu w liście, który będzie == element. Ta metoda zadziała jedynie, gdy w naszej sekwencji będziemy mieć unikatowe obiekty. W momencie, gdy obiekty będą się powtarzać, metoda zwróci za każdym razem indeks pierwszego wystąpienia danego obiektu.

Page 34: PyTraning 2.0 #5: Ssssssssss jak słowniki

Zadanie 6.1>>> for el in range (len(unikatowe_prezenty_1)):

print(unikatowe_prezenty_1[el])

???

>>> n = 0

>>> for el in unikatowe_prezenty_1:

print(unikatowe_prezenty_1[n])

n+=1

???

>>> for el in enumerate(unikatowe_prezenty_1):

print(unikatowe_prezenty_1[el[0]])

???

>>> for el in unikatowe_prezenty_1:

print(unikatowe_prezenty_1[unikatowe_prezenty_1.index(el)])

???

Dla utrwalenia

Page 35: PyTraning 2.0 #5: Ssssssssss jak słowniki

Zadanie 6.1

??? =

>>> #wszystkie komendy powinny zwrócić

Rower

Tablet

Zestaw do szycia

Szczeniak

Szalik

Lalka Barbie

Pizama

Narty

Lyzwy

Bilet do kina

Domek dla lalek

Rozga

Sweter

Samochodziki

Page 36: PyTraning 2.0 #5: Ssssssssss jak słowniki

Zadanie 6.2

>>> for prezent in sorted(set(prezenty)):

print prezent

Dla utrwalenia

Jeśli chcemy wyświetlić unikatowe elementy z listy w porządku alfabetycznym bez tworzenia samemu

nowych zmiennych możemy to zrobić za jednym razem.

Page 37: PyTraning 2.0 #5: Ssssssssss jak słowniki

Zadanie 7

Wyświetl teraz po kolei na ekranie wszystkie pary z utworzonego przez siebie słownika prezentów

dla dzieci.

Page 38: PyTraning 2.0 #5: Ssssssssss jak słowniki

Zadanie 7

Wyświetl teraz po kolei na ekranie wszystkie pary z utworzonego przez siebie słownika prezentów

dla dzieci.>>> for dziecko in prezenty_dla_dzieci:

print(dziecko, prezenty_dla_dzieci[dziecko])

Słownik jest nieuporządkowany, w związku z czym tak naprawdę nie przechodzimy tutaj po słowniku, a po liście jego kluczy.

Page 39: PyTraning 2.0 #5: Ssssssssss jak słowniki

Połączmy wszystko!!

Page 40: PyTraning 2.0 #5: Ssssssssss jak słowniki

Zadanie 8

Połącz obie listy – dzieci i prezenty - w słownik w taki sposób, by dziecko było kluczem a prezent mu

przypisany wartością. Pamiętaj, że klucze muszą być unikatowe! Sprawdź wpierw czy lista dzieci

jest unikatowa.

Page 41: PyTraning 2.0 #5: Ssssssssss jak słowniki

Zadanie 8

Połącz obie listy – dzieci i prezenty - w słownik w taki sposób, by dziecko było kluczem a prezent mu

przypisany wartością. Pamiętaj, że klucze muszą być unikatowe! Sprawdź wpierw czy lista dzieci

jest unikatowa.

Hint? <pokaż spojler>

Page 42: PyTraning 2.0 #5: Ssssssssss jak słowniki

Zadanie 8

Połącz obie listy – dzieci i prezenty - w słownik w taki sposób, by dziecko było kluczem a prezent mu

przypisany wartością. Pamiętaj, że klucze muszą być unikatowe! Sprawdź wpierw czy lista dzieci

jest unikatowa.

Użyj pętli for

Page 43: PyTraning 2.0 #5: Ssssssssss jak słowniki

Zadanie 8

Połącz obie listy – dzieci i prezenty - w słownik w taki sposób, by dziecko było kluczem a prezent mu

przypisany wartością. Pamiętaj, że klucze muszą być unikatowe! Sprawdź wpierw czy lista dzieci

jest unikatowa.

Użyj pętli forSkorzystaj z zadania 6

Page 44: PyTraning 2.0 #5: Ssssssssss jak słowniki

Zadanie 8>>> dzieci_i_prezenty = {}

>>> len(prezenty)

35

>>> len(dzieci)

35

>>> len(set(dzieci))

35

>>> len(dzieci) == len(set(dzieci))

True

Uproszczona wersja – zakładamy, że działamy na liście unikatowych kluczy. W przypadku, gdybyśmy mieli listę dzieci z powtarzającymi się imionami trzeba by do pętli for tworzącej słownik (czyli następne slajdy) – dołączyć wyrażenie warunkowe – co robić, gdy dany klucz już mamy i nie chcemy go nadpisywać.

Tutaj dzieci są unikatowe, więc nie będzie problemu z nadpisaniem.

Sprawdzam też czy obie listy są równej długości, żeby nie pojawił się później problem, gdyby lista np. dzieci była dłuższa i próbowalibyśmy dodać prezent z pozycji, która w liście prezentów nie istnieje.

Page 45: PyTraning 2.0 #5: Ssssssssss jak słowniki

Zadanie 8 – rozwiązanie 1>>> dzieci_i_prezenty = {}

>>> for index in range(dzieci):

dzieci_i_prezenty[dzieci[index]] = prezenty[index]

>>> print(dzieci_i_prezenty)

Bierzemy zakres od 0 do długości listy dzieci. Po kolei będziemy odnosić się a pomocą indeksu zarówno do listy dzieci, jak i listy prezentów. Temu samemu indeksowi z listy dzieci będzie odpowiadać obiekt z listy prezentów.

Page 46: PyTraning 2.0 #5: Ssssssssss jak słowniki

Zadanie 8 – rozwiązanie 2>>> dzieci_i_prezenty = {}

>>> for index, dziecko in enumerate(dzieci):

dzieci_i_prezenty[dziecko] = prezenty[index]

>>> print(dzieci_i_prezenty)

Enumerate zwraca nam tuplę, która posiada indeks (licznik) i wartość z listy. Dlatego też nie musimy już odnosić się do listy dzieci podczas tworzenia pary klucz:wartość. Z listy prezentów pobieramy element znajdujący się w pozycji, określonej przez indeks.

Page 47: PyTraning 2.0 #5: Ssssssssss jak słowniki

Zadanie 8 – rozwiązanie 3>>> dzieci_i_prezenty = {}

>>> n = 0

>>> for dziecko in dzieci:

dzieci_i_prezenty[dziecko] = prezenty[n]

n += 1

>>> print(dzieci_i_prezenty)

Jak wcześniej przy enumerate, tylko tutaj sami tworzymy licznik, który będzie nam liczył przejścia pętli.

Page 48: PyTraning 2.0 #5: Ssssssssss jak słowniki

Zadanie 8 – rozwiązanie 4>>> dzieci_i_prezenty = {}

>>> for dziecko, prezent in zip(dzieci, prezenty):

dzieci_i_prezenty[dziecko] = prezent

>>> print(dzieci_i_prezenty)

Funkcja zip łączy listy/tuple, tworząc nowy obiekt zip:

>>> c = zip(dzieci,prezenty)>>> c<zip object at 0x000000000513B388>

Kolejne elementy w tym obiekcie to tuple w postaci (dziecko, prezent) z kolejnych pozycji obu list/tupli. (chyba, że mamy więcej list/tupli podanych to tuple będą wtedy w postaci (a,b,..,n))

Ilość takich tupli równa się długości najkrótszej listy/tupli – czyli możemy łączyć sekwencje różnej długości.

Możemy zobaczyć jak wygląda taki zip zmieniając jego typ -> np.:>>> print(list(c))

Page 49: PyTraning 2.0 #5: Ssssssssss jak słowniki

Zadanie 8 – rozwiązanie 5>>> dzieci_i_prezenty = {}

>>> dzieci_i_prezenty = dict(zip(dzieci, prezenty))

>>> print(dzieci_i_prezenty)

Jak wyżej. Jednakże w przypadku, gdy za pomocą zipa łączymy 2 listy/tuple – wówczas możemy użyć funkcji dict, by od razu obiekt zip zmienić na słownik. Gdy połączymy za pomocą zipa więcej obiektów to dict nie zadziała.

Page 50: PyTraning 2.0 #5: Ssssssssss jak słowniki

Zadanie 8 – rozwiązanie 6>>> dzieci_i_prezenty = {}

>>> for dziecko in dzieci:

dzieci_i_prezenty[dziecko] = prezenty[dzieci.index(dziecko)]

>>> print(dzieci_i_prezenty)

Jako ciekawostka z użyciem metody index.

W krokach wyglądałoby to tak:

For dziecko in dzieci:index = dzieci.index(dziecko)]dzieci_i_prezenty[dziecko] = prezenty[index]

Page 51: PyTraning 2.0 #5: Ssssssssss jak słowniki