Python - zajęcia 4
- Struktury danych
- Metody
Struktury danych: listy, krotki, słowniki, zbiory.
The AI workspace that works for you. | Notion
A tool that connects everyday work into one space. It gives you and your teams AI tools—search, writing, note-taking—inside an all-in-one, flexible workspace.

📝Moje notatki
💭
Typ danych do kwestionariusza
Zastanówcie się w jakiej strukturze danych można by było przechowywać quiz / kwestionariusz.
Ustaliliśmy, że wyniki uczestników quizu będziemy przechowywać w osobnej strukturze (i innej zmiennej).
Zasugerowałyście, że istotna są dla Was:
• pytania bez powtórzeń
• łatwość zmiany kolejności wyświetlania odpowiedzi
• odp. i pkt. w tym samym miejscu / tej samej strukturze
• kolejność przechowania punktów za odp i samego wariantu odpowiedzi ma znaczenie. Warto to zaznaczyć przy wyborze struktury danych
💡
1. Do przechowywania pytań najsensowniejszym rozwiązaniem wydaje się być lista słowników. Słowniki miałby trzy klucze:
-
pytanie
-
odpowiedzi
-
poprawna_odpowiedz
Przykład:
{
"pytanie": "Jaki jest wynik 2+2?",
"odpowiedzi": ["1", "4", "22"],
"poprawna_odpowiedz": "4"
}
To, że byłaby to lista słowników powoduje, że możemy zmieniać kolejność pytań. Również to, że podpowiedzi a,b,c byłyby przechowywane jako lista dają możliwość mieszania. Dodatkowo słownik daję porządek i pozwala na odwołanie się do pytania czy poprawnej odpowiedzi.
- Do przechowywania odpowiedzi użytkownika i punktów użyłabym listy.
💻
Kod i zadania
# 1. Get the smallest number from a list
# m = [2, 6, 1, 4, 5]
# def smallest_num_in_list(list):
# list.sort()
# print(list)
# smallest_num_in_list(m)
# 2. Count Strings with Same Start and End
# Write a Python program to count the number of strings from a given list of strings. The string length is 2 or more and the first and last characters are the same.
# Sample List : ['abc', 'xyz', 'aba', '1221']
# Expected Result : 2
# list = # ['abc', 'xyz', 'aba', '1221']
# list = ['abc', 'xyz', 'aba', '1221', '11211', '111', '23432']
# ile = 0
# for string in list:
# if len(string) >= 2:
# start = string[0]
# end = string[-1]
# if start == end:
# ile += 1
# print(ile)
# 3. Sort Tuples by Last Element
# Write a Python program to get a list, sorted in increasing order by the last element in
# each tuple from a given list
# of non-empty tuples.
# Sample List : [(2, 5), (1, 2), (4, 4), (2, 3), (2, 1)]
# lista = [(2, 5), (1, 2), (4, 4), (2, 3), (2, 1)]
# lista.sort(key=lambda x: x[0])
# print(lista)
# # lambda jest często używana w Pythonie w takich funkcjach jak:
# # sorted()
# # map()
# # filter()
# # max() / min() z parametrem key
# 4. Remove Duplicates from List
# Write a Python program to remove duplicates from a list.
# lista = [2, 5, 1, 2, 4, 4, 2, 3, 2, 1]
# or = set(lista)
# print(or)
# lista = list(or)
# print(lista)
# # 5.Check if List is Empty
# # Write a Python program to check if a list is empty or not.
# def sprawdz_czy_lista_pusta(list):
# if list:
# print('Lista jest gitówa!')
# else:
# print('Lista jest pusta!')
# sprawdz_czy_lista_pusta([])
# # 6. Clone or Copy a List
# lista1 = [2, 5, 1, 2, 4, 4, 2, 3, 2, 1]
# lista2= lista1
# # 7. Find Words Longer Than n
# # Write a Python program to find the list of words that are longer than n from a given list of words.
# lista_slow = ['mango', 'koń', 'kot', 'gruszka', 'meble']
# dlugie_slowa = list()
# for index in range(len(lista_slow)):
# if len(lista_slow[index]) > 3:
# dlugie_slowa.append(lista_slow[index])
# print(dlugie_slowa)
# def wypluj_dlugie_slowa(lista, n):
# dlugie_slowa = list()
# for index in range(len(lista)):
# if len(lista[index]) > n:
# dlugie_slowa.append(lista[index])
# print(dlugie_slowa)
# wypluj_dlugie_slowa(['mango', 'koń', 'kot', 'gruszka', 'meble'], 5)
# lista - deklarujemy z uzyciem []
# # mozemy przechowywac na niej str, int, float, listy, słowniki....
# # jest modyfikowalna (mutable)
# jakas_lista = []
# # fajnie gdy nie mieszamy typów na liście
# mojalista =
# # fajnie gdy nie mieszamy typów na liście
# zwierzeta = ['pies']
# zwierzeta. append("koń")
# print(zwierzeta)
# rosliny = ["kaktus", "drzewo"]
# print(rosliny)
# natura = rosliny + zwierzeta
# print(natura)
# # krotka - na pierwszy rzut oka podobna do listy
# # ... ale niemodyfikowalna (immutable)
# mojakrotka = (1, 2, 3, 4)
# print(mojakrotka)
# print(type(mojakrotka))
# topor = ("ciezki topór", 100) #ekwipunek gracza
# # # dodawanie elemntów do listy
# lista_treningowa = ["test1", "test2", ["test3", "test4"]]
# print(lista_treningowa[-1][-2])
# lista_treningowa.insert([-1], "moja")
# print(lista_treningowa)
# moje_ksiazki = ["Blade Runner", "Hobbit", "Unicorn Project"]
# # dodaj książkę
# # konkretyny element listy/krotki mozemy "wyciagnac"
# # uzywajac indeksu wpisanego w nawiasach kwadratowych.
# # Indeksy zaczynają się od 0 !!!
# kategorie_menu = ("przystawki", "zupy", "dania główne", "desery")
# # 0 1 2 3
# moja_lista = ["cos1", "cos2", "cos3", "cos4"]
# # wyświetl pierwszą książkę
# print(moje_ksiazki[0])
# # wyświetl ostatnią książkę
# print(moje_ksiazki[-1])
# # krotka - dobra do kolekcji o stałej zawartości
# # częściej w niej mieszamy typy,
# # sięgamy po elementy w środku etc ( - bo jej długość jest niezmienna)
# kategorie_menu = ("przystawki", "zupy", "dania główne", "desery")
# print(kategorie_menu[0])
# print(kategorie_menu[-1])
# # jak dodać do poniższej listy zakupów "mango"?
# zakupy = ["miód", "pieprz", "jogurt", "sałata"]
# # metoda append
# zakupy.append("mango")
# print(zakupy)
# print("ilość elementów w liście \"Zakupy\" ", len(zakupy))
# print(zakupy[1:]) ==> print(zakupy[1:-1])
# zakupy.append("truskawki")
# zakupy.append("śliwki")
# print(zakupy)
# zakupy.append("śliwki")
# zakupy.append("śliwki")
# print(zakupy)
# print(zakupy.count("śliwki"))
# print("ilość elementów w liście \"Zakupy\" ", len(zakupy))
# Lista w liście:
# zwierzaki = ["pies", "kot", ["neonki", "danio", "hokejówki"]]
# print(zwierzaki[2][1])
# Aby wybierał co 2 element:
# print(zakupy[1::2]) # od 1 do końca, co drugi element
# kolekcje: listy, krotki, słowniki
# # jak sprawdzić indeks elementu
# print(zakupy.index("pieprz"))
# # jak zliczyć ilość wystąpień?
# # Należy użyć metody count
# print(f"ilość śliwek na liście: {zakupy.count("śliwki")}")
# # jak połączyć spożywcze i higiena w jedną listę "wszystkie_zakupy"?
# spozywcze = ["miód", "pieprz", "jogurt", "sałata"]
# higiena = ["mydło", "pasta do zębów"]
# print(spozywcze+higiena)
# # jeśli listy / krotki mają wiele elementów to możemy zapisywać je w osobnych wierszach np.
# punkty_doswiadczenia = [
# 100,
# 200,
# 765,
# 432,
# 128,
# 905,
# ]
# print(punkty_doswiadczenia[-3:])
# # wyswietl 3 ostatnie element listy i 2 ostatnie element krotki
# mojalista = ["a", "b", "c", "d", "e"]
# mojakrotka = (1, 2, 3, 4)
# print(mojalista[-3:], mojakrotka[-2:])
# # # a jak wyswietlic 3 litere ponizszego ciagu znaków?
# tekst = "Lorem ipsum"
# print(tekst[2])
# # jakies wnioski?
# # jak wyswietlic drugi element listy? (czyli orange)
# mojalista = ["red", "orange", "green", "blue", "white"]
# print(mojalista[1])
# # # jak wyswietlic "orange", "green", "blue"?
# print(mojalista[1] + ', ' + mojalista[2]+', ' + mojalista[3])
# print(str(mojalista[1:4]))
# print(", ".join(mojalista[1:4]))
# print("^".join(mojalista[1:4]))
# # # jak wyświetlić ostatni element?
# print(mojalista[-1])
# # mając poniższą listę:
# moje_zakupy = ["miód", "pieprz", "jogurt", "sałata", "mango"]
# # jak zamienić "mango" na "jabłka"?
# moje_zakupy[-1]="jabłka"
# # jak spradzić czy na liście jest "sól"?
# print(moje_zakupy.count("sól"))
# # jak wyświetlić użytkownikowi komunikat, że trzeba ją kupić (gdy nie ma)
# -> Przyjmuję, ze gdy nie ma na liście zakupów soli to wyświetlam komunikat
# if moje_zakupy.count("sól") == 0:
# print("Nie zapomnij kupić soli - nie masz jej na liście!")
# else:
# print("Masz sól na liście: kup ją bo jajecznica będzie słaba!")
# # jak napisać instrukcję, która sprawdzi
# # czy na liście są jakieś elementy?
# if len(moje_zakupy) != 0:
# print("Są zakupy do zrobienia.")
# else:
# print("Wszystko jest :)\nNie wchodź do żabki, bo znowu wydasz pieniądze na głupoty")
# # Jeśli tak - wyświetli "Są zakupy do zrobienia.".
# # Jeśli nie - "Wszystko jest :)."
# # Czy nie fajnie by było mieć funkcję,
# # która przyjmie jako argument dowolną listę zakupów ;)?
# azak = moje_zakupy
# def lista_pusta(azak):
# if len(azak) != 0:
# print("Są zakupy do zrobienia.")
# else:
# print(
# "Wszystko jest :)\nNie wchodź do żabki, bo znowu wydasz pieniądze na głupoty!")
# lista_pusta(moje_zakupy)
# print("*"*15)
# lista_pusta([])
# # # ile elementów ma poniższa lista? czy jest poprawna?
# mojalista2 = [(2, 5), (1, 2), (4, 4), (2, 3), (2, 1)]
# # Ma 5 elementów i jest poprawna. Trzymamy się konwencji by nie mieszać typów. A tu są same krotki
# # # jaki indeks ma ostatni element? -> 4
# # # Jak to sprawdzić wykorzystując funkcję len?
# print(f"ostatni element w mojalista2 ma indeks: {len(mojalista2)-1}")
# # czy poniższa operacja będzie ok? -> TAK
# mojalista = ["red", "orange", "green", "blue", "white"]
# print(f"Przed append: {mojalista}")
# mojalista.append("black")
# print(f"Po append: {mojalista}")
# # czy poniższa operacja będzie ok? -> tak
# mojalista = ["a", "b", "c", "d", "e"]
# mojalista += ["white"]
# print(mojalista)
# print(f"Ta lista ma {len(mojalista)} elementów.")
# # # czy poniższa operacja będzie ok? A jeśli tak - jaki będzie wynik? -> Tak pojawi się black na końcu początkowej listy
# mojalista = ["a", "b", "c", "d", "e"]
# mojalista.append("black")
# print(mojalista)
# # # czy poniższa operacja będzie ok? -> tak
# mojalista = ["a", "b", "c", "d", "e"]
# mojalista.pop(1)
# print(mojalista)
# # czy poniższa operacja będzie ok? -> Tak, choć na listach nie powinniśmy mieszać typów
# mojalista = ["a", "b", "c", "d", "e"]
# mojalista += [2]
# print(mojalista)
# # # czy poniższa operacja będzie ok?-> Tak, choć na listach nie powinniśmy mieszać typów
# # mojalista = ["a", "b", "c", "d", "e"]
# # mojalista += (1, 2, 3)
# # czy poniższa operacja będzie ok?-> TAK
# mojalista = [1, 2, 3]
# mojalista2 = [3, 4]
# sklejone = mojalista + mojalista2
# # gracz ma w ekwipunku skladniki
# # jesli ma mana potion i magic dust powinien dostac greater mana potion
# # ... a skladniki do niego powinny zostac usuniete
# ekwipunek = ["mana potion", "mushroom", "magic dust"]
# if "mana potion" in ekwipunek and "magic dust" in ekwipunek:
# ekwipunek.remove("mana potion")
# ekwipunek.remove("magic dust")
# ekwipunek.append("greater mana potion")
# print(ekwipunek)
# # czy poniższa operacja będzie ok? -> tak
# mojakrotka = (1, 2, 3)
# mojakrotka2 = (3, 4)
# sklejone = mojakrotka + mojakrotka2
# print(sklejone)
# # czy poniższa operacja będzie ok? -> Nie, krotki są niemodfikowalne i nie mają metody append
# krotka1 = ("red", "orange", "green")
# krotka1.append("white")
# # czy poniższa operacja będzie ok? -> Nie, krotki są niemodfikowalne
# krotka1 = ("red", "orange", "green")
# krotka1 += "white"
# # # czy poniższa operacja będzie ok? -> Nie, krotki są niemodfikowalne
# krotka1 = ("red", "orange", "green")
# krotka2 = krotka1 + ("white")
# # a tak? tak, bo krotka2 się dopiero tworzy
# krotka1 = ("red", "orange", "green")
# krotka2 = krotka1 + ("white",)
# dziwna_krotka = ("Aragorn", [100, 100])
# dziwna_krotka[1][0] -= 30
# print(dziwna_krotka) # -> da nam wynik ("Aragorn", [70, 100])
# # jak policzysz ilość słów w poniższym zdaniu?
# print(moje_zdanie.count(' ') )
# len(moje_zdanie[start:index])
# print(moje_zdanie.find(' '))
# print(4+moje_zdanie[3+1:].find(' '))
# moje_zdanie = "Ala ma kota - powiedział Stefan."
# ilosc_slow = 0
# start = 0
# index = 0
# koniec = len(moje_zdanie)
# while index < koniec:
# if moje_zdanie[start:].find(' ') > 0:
# index = moje_zdanie[start:].find(' ')
# else:
# index = koniec
# if len(moje_zdanie[start:start+index]) >= 2:
# ilosc_slow += 1
# print(
# f"start: {start}, indeks: {index}, slowo: {moje_zdanie[start:start+index]}")
# start += 1 + index # żeby ominąć tę spację +1
# print(f"\n\n{"*"*20}\nIlość słow w zdaniu: {ilosc_slow}")
# ******************************
# Ver 2: po prysznicu xD
# ******************************
# moje_zdanie = "Ala ma kota - powiedział Stefan."
# ilosc_slow = 0
# start = 0
# index = 0
# koniec = len(moje_zdanie)
# while index < koniec:
# if moje_zdanie[start:].find(' ') > 0:
# index = moje_zdanie[start:].find(' ')
# else:
# index = koniec
# if (moje_zdanie[start:start+index].isalpha() or moje_zdanie[start:start+index][-1] in {".", ","}):
# ilosc_slow += 1
# print(
# f"start: {start}, indeks: {index}, slowo: {moje_zdanie[start:start+index]}, znaki {moje_zdanie[start:start+index].isalpha()}")
# start += 1 + index # żeby ominąć tę spację +1
# print(f"\n\n{"*"*20}\nIlość słow w zdaniu: {ilosc_slow}")
# ### Slowniki
# # pary klucz:wartość
# # przy dużych kolekcjach jestesmy w stanie szybko siegnac po wartosc poprzez klucz
# slownik = {
# "klucz1": 2,
# "klucz2": 33,
# "klucz3": 77,
# }
# print(slownik["klucz2"])
# # moj_slownik = {
# # "klucz1": "wartość1",
# # "klucz2": "wartość2",
# # "klucz3": "wartość3",
# # "klucz4": "wartość4",
# # }
# moj_slownik2 = {
# 1: "wartość1",
# 2: "wartość2",
# 3: "wartość3",
# 4: "wartość4",
# }
# print(moj_slownik2.values())
# moj_slownik2["klucz 5"] = "kolejna wartosc"
# moj_slownik2[6] = "kolejna wartosc 6"
# print(moj_slownik2)
# # SLOWNIKI
# moj_slownik = {
# "klucz1": "wartość1",
# "klucz2": "wartość2",
# "klucz3": "wartość3",
# "klucz4": "wartość4",
# "klucz5": [1, 2, 3],
# }
# # jak wyświetlić "wartość3"?
# moj_slownik = {
# "klucz1": "wartość1",
# "klucz2": "wartość2",
# "klucz3": "wartość3",
# }
# print(moj_slownik.get("klucz3"))
# # co zwraca poniższa metoda?
# print(moj_slownik.items())
# print(moj_slownik.values())
# # zbiory z listy
# mojalista = ["a", "b", "a", "d", "e", "a"]
# zbior = set(mojalista) #=> Sposób na usuwanie duplikató z listy
# print(zbior)
# lista_ze_zbioru = list(zbior)
# print(lista_ze_zbioru)
# # jak wyświetlić literę "a" ?
# pies = {
# 1: "a",
# }
# print(pies[1])
# # czy to jest poprawne? -> Tak, słowniki mogą powtarzać wartości. to klucze mają być unikalne
# moj_slownik2 = {
# "a": "1",
# "b": "1",
# }
# # czy to jest poprawne? jaki będzie wynik? -> przechodzi. traktuje jakby przecinka nie było
# moj_slownik3 = {
# "a": "2",
# }
# print(moj_slownik3)
# # czy to jest poprawne?-> Nie, nie możeny używać "+" do słowników
# moj_slownik2 = {
# "a": "1",
# "b": "1",
# }
# print(moj_slownik2)
# moj_slownik3 = {
# "c": "3",
# "d": "4",
# }
# slowniki_razem = moj_slownik2 + moj_slownik3
# # czy to jest poprawne? -> tak
# moj_slownik2 = {
# "a": "1",
# "b": "1",
# }
# moj_slownik3 = {
# "c": "3",
# "d": "4",
# }
# moj_slownik2.update(moj_slownik3)
# print(moj_slownik2)
# print(moj_slownik3)
# # czym sie rozni update od | lub {**dict1, **dict2}? -> Niczym w wyniku
# moj_slownik2.update(moj_slownik3)
# print("update ", moj_slownik2)
# print("moj_slownik2 | moj_slownik3", moj_slownik2 | moj_slownik3)
# print("**dict1, **dict2}", {*moj_slownik2, *moj_slownik3}) #-> liczba gwiazdek to liczba elementów
# # Struktury mieszane:
# przepis = {"jajecznica": ["jajka","sól","pieprz"], "zupa": ["woda", "kość"]}
