Upload
kaja-milanowska
View
1.290
Download
0
Embed Size (px)
Citation preview
PyTraning2.0 #5:Ssssssssss jak słowniki..
Słowniki, pętle
user_38251
9feSI6ru3na
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]
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)
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)
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
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
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
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)
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)
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']
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)
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
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)
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.
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}
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)
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
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'})
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
Pętle - For
Pętle - For
Pętle - For
Pętle - For
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)
Zadanie 5
Teraz narysuj choinkę używając pętli for i poniższej listy:
choinka = [' * ', ' *** ', ' ***** ', '*******']
Zadanie 5
Teraz narysuj choinkę używając pętli for i poniższej listy:
choinka = [' * ', ' *** ', ' ***** ', '*******']
for tree_element in choinka:
print(tree_element)
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.
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.
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]).
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.
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.
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
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
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.
Zadanie 7
Wyświetl teraz po kolei na ekranie wszystkie pary z utworzonego przez siebie słownika prezentów
dla dzieci.
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.
Połączmy wszystko!!
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.
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>
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
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
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.
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.
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.
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.
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))
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.
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]