Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

PyTraning 2.0 #5: Ssssssssss jak słowniki.

1.660 Aufrufe

Veröffentlicht am

Pomagamy Pythonowi zabawić się w Gwiazdora - tym razem spróbujemy mu pomóc w dostarczeniu prezentów dla dzieci - czy uda się przypisać prezenty do dzieci?

Veröffentlicht in: Software
  • Als Erste(r) kommentieren

PyTraning 2.0 #5: Ssssssssss jak słowniki.

  1. 1. PyTraning2.0 #5: Ssssssssss jak słowniki.. Słowniki, pętle
  2. 2. user_38251 9feSI6ru3na
  3. 3. 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]
  4. 4. 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)
  5. 5. 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)
  6. 6. 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
  7. 7. 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
  8. 8. 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
  9. 9. 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)
  10. 10. 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)
  11. 11. 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']
  12. 12. 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)
  13. 13. 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 komend y można zapisać w jednej linijce
  14. 14. 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)
  15. 15. 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.
  16. 16. 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}
  17. 17. 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)
  18. 18. 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
  19. 19. 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'})
  20. 20. 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
  21. 21. Pętle - For
  22. 22. Pętle - For
  23. 23. Pętle - For
  24. 24. Pętle - For
  25. 25. 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)
  26. 26. Zadanie 5 Teraz narysuj choinkę używając pętli for i poniższej listy: choinka = [' * ', ' *** ', ' ***** ', '*******']
  27. 27. Zadanie 5 Teraz narysuj choinkę używając pętli for i poniższej listy: choinka = [' * ', ' *** ', ' ***** ', '*******'] for tree_element in choinka: print(tree_element)
  28. 28. Zadanie 6 Pomóż Mikołajowi wyświetlić po kolei na ekranie wszystkie unikatowe prezenty z pierwszej tupli prezentów razem z ich indeksem w tejże tupli.
  29. 29. 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 counter ma już wartość 1, co odpowiada indeksowi kolejnego elementu. I tak do końca sekwencji.
  30. 30. 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 range podajemy 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]).
  31. 31. 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.
  32. 32. 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.
  33. 33. 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
  34. 34. 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
  35. 35. 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.
  36. 36. Zadanie 7 Wyświetl teraz po kolei na ekranie wszystkie pary z utworzonego przez siebie słownika prezentów dla dzieci.
  37. 37. 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.
  38. 38. Połączmy wszystko!!
  39. 39. 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.
  40. 40. 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>
  41. 41. 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
  42. 42. 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 Skorzystaj z zadania 6
  43. 43. 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.
  44. 44. 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.
  45. 45. 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.
  46. 46. 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.
  47. 47. 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))
  48. 48. 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.
  49. 49. 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]

×