Python zajęcia 4
Struktury danych służą do organizowania i przechowywania danych
LISTY I KROTKI
<< Podobieństwa >>
- Służą do przechowywania danych w zorganizowany sposób, jeden element za drugim
- Każdy element ma swój indeks (indeksy zaczynają się od 0)
- Mogą posiadać duplikaty
<< Różnice >>
- LISTY
- są modyfikowalne (mutable) tzn. można dodawać/odejmować nowe elementy
- można przemieszczać się po jej elementach
- unika się sięgania po elementy umieszczone w środku list
- deklaruje się je poprzez użycie nawiadów kwadratowych []
moje_ksiazki = ["Blade Runner", "Hobbit", "Fundacja"]- KROTKI
- są niemodyfikowalne (immutable)
- ich długość jest stała, więc jest większa możliwość sięgania po elementy znajdujące się gdzieś w środku
- deklaruje się je poprzez użycie nawiasów okragłych ()
kategorie_menu = ("Przystawki", "Zupy", "Dania główne", "Desery")
INDEKSY
- Indeksy są liczone od 0 nie od 1
- Możliwe jest też sięgnięcie "wstecz" np. ostatni element można wskazać przez użycie indeksu -1
- Chcąc "wyciągnąć" konkretny element będący ich częścią wpisujemy identyfikator w nawiasach kwadratowych po nazwie zmiennej
nazwa_zmiennej[indeks]moja_lista = ["cos1", "cos2", "cos3", "cos4"]
print(moja_lista[2])- Chcąc wyświetlić zakres elementów listy / krotki należy wpisać w nawiasie kwadratowym element startowy i element końcowy oddzielone dwukropkiem
moja_zmienna[start:koniec]print(moja_lista[1:3]- Jeśli pominiesz pierwszy indeks, wycinek zaczyna się od początku listy. Jeśli pominiesz drugi indeks, wycinek idzie aż do końca. Jeśli pominiesz oba wycinek jest kopią całej listy
moja_lista = ["a", "b", "c", "d", "e", "f"]
moja_lista[1:3] => ["b", "c"]
moja_lista[:4] => ["a", "b", "c", "d"]
moja_lista[3:] => ["d", "e", "f"]
moja_lista[1:3] = ["x", "y"]
print(moja_lista) => ["a", "x", "y", "d", "e", "f"]METODY
Metody to specjalne funkcje przypisane do danego obiektu. Wywołuje się je poprzez wpisanie nazwy zmiennej, postawienie kropki i wstawienie parametrów do metody w nawiasach okrągłych (jeśli nie przekazujemy żadnych zostawiamy same nawiasy okrągłe)
nazwa_zmiennej.nazwa_metody(atrybuty)
moja_lista = ["a", "b", "c"]
moja_lista.append("d")
print(moja_lista)
["a", "b", "c", "d"]
moja_lista1 = ["a", "b", "c"]
moja_lista2 = ["d", "e"]
moja_lista1(extend(moja_lista2)
print(moja_lista1)
["a", "b", "c", "d","e"]
moja_lista = ["a", "b", "c"] #jeśli nie podamy indeksu to zwróci on ostatni element listy
moja_lista2 = moja_lista.pop(1)
print(moja_lista2)
["a", "c"]
# jeśli znasz element, który chcesz usunąć (ale nie jego indeks) możesz użyć metody remove()
moja_lista = ["a", "b", "c"]
mja_lista.remove("b")
print(moja_lista)
["a", "c"]FUNKCJE
mja_lista = [3, 41, 12, 9, 74, 15]
print(len(moja_lista))
6
print(max(moja_lista))
74
print(min(moja_lista))
3
print(sum(moja_lista))
154
print(sum(moja_lista) / len(moja_lista))
25.6666666666668SŁOWNIKI I ZBIORY
Zarówno słowniki jak i zbiory przechowują "klucze", które nie mogą się powtarzać (są unikalne). Jednak w przypadku słowników z kluczem jest powiązana wartość.
Klucze muszą być wartością na której da się wykonać tzw. funkcję skrótu (są "hashable"). W tym wypadku chodzi o to, że muszą to być obiekty, które nie są modyfikowalne (np. ciągi znaków, liczby).
<< SŁOWNIKI >>
Umożliwiają szybkie odnalezienie jakiejś zawartości z pomocą wartości klucza przypisanego do niej.
Deklarujemy je poprzez użycie nawiasów klamrowych {} , a w nich pary klucz, wartość rozdzielonych dwukropkiem.
moj_slownik={klucz:wartość}Chcąc wyświetlić wartość przechowywaną pod konkretnym kluczem działamy podobnie jak z listą.
Różnica polega na tym, że w nawiasach kwadratowych podajemy nie indeks, tylko klucz np.
menu ={
"zupa" : "ogórkowa",
"lody" : "waniliowe",
"sok" : "pomarańczowy"
}
print(menu["zupa"])
["ogórkowa"]
Jeśli chcemy dodać nowy element :
moj_slownik[nowy_klucz] = wartość
moj_slownik = {"klucz1":"wartość1", "klucz2":"wartość2"}
moj_slownik["klucz3]="wartosć3"
Chcąc usunąć element ze słownika :
moj_slownik = {"klucz1":"wartość1", "klucz2":"wartość2"}
moj_slownik.pop("klucz1")Wybrane metody dla słowników

<< ZBIORY >>
- Wyglądają podobnie do listy. Mają jednak jedną cenną cechę: nie posiadają duplikatów wartości. Czyli jeśli dwa razy spróbujemy do zbioru dodać np. słowo "kot" to ten drugi wpis zostanie usunięty.
- Nie mają też indeksów (!).
- Bezpiecznie jest myśleć o nich jako o takich dziwnych słownikach, które mają jedynie klucze. Pewnie dlatego też, podobnie jak słowniki, deklaruje się je z użyciem nawiasów klamrowych:
moj_zbior = {unikat1, unikat2, unikat3}Właśnie ten brak powtórzeń jest często wykorzystywany - np. zamieniamy listę na zbiór żeby pozbyć się duplikatów.
ksiazki = ["Endymion", "Hobbit", "Fundacja", "Endymion"]
zbior_ksiazek = set(ksiazki)
ksiazki_bez_powtorzen = list(zbior_ksiazek)Ważne!!! - zbiór jest strukturą danych nieuporządkowanych czyli kolejność podczas wyświetlania może się zmieniać
- lista jest strukturą uporządkowaną
<< STRUKTURY MIESZANE >>
Elementem słownika, listy czy krotki może być inny słownik, lista, krotka
przepisy = {
"jajecznica": ["cebula", "jajko", "masło", "boczek", "szczypiorek"]
}#Dane quizu
pytania = {
"pytanie1": {
"tresc": "Która funkcja w Pythonie służy do wpisywania tekstu?",
"opcje": ["a. input ()", "b. print()", "c. display()"],
"odpowiedz": "b"
},
"pytanie2": {
"tresc": "Jakiego operatora używa się do potęgowania?",
"opcje": ["a. **", "b. //", "c. $$"],
"odpowiedz": "a"
},
"pytanie3": {
"tresc": "Który z poniższych nie jest poprawną nazwą zmiennej?",
"opcje": ["a. zmienna2", "b. zmienna_2", "c. 2zmienna"],
"odpowiedz": "c"
},
"pytanie4": {
"tresc": "Jak zamienić liczbę całkowitą na typ zmiennoprzecinkowy?",
"opcje": ["a. int()", "b. str()", "c. float()"],
"odpowiedz": "c"
},
"pytanie5": {
"tresc": "Jakiego operaotra używa się do sprawdzenia czy dwie wartości są sobie równe?",
"opcje": ["a. !=", "b. ==", "c. ="],
"odpowiedz": "b"
},
"pytanie6": {
"tresc": "Który symbol jest używany do komentowania pojedynczej linii kodu?",
"opcje": ["a. #", "b. //", "c. $"],
"odpowiedz": "a"
},
"pytanie7": {
"tresc": "Która z poniższych fukncji konwertuje wartość na liczbę całkowitą?",
"opcje": ["a. int()", "b. float()", "c. str()"],
"odpowiedz": "a"
},
"pytanie8": {
"tresc": "Co będzie wynikiem print(5<3 or 10>5) ?",
"opcje": ["a. error", "b. false", "c. true"],
"odpowiedz": "c"
},
"pytanie9": {
"tresc": "Która funkcja pozwala na pobranie danych wprowadzonych przez użytkownika z klawiatury ?",
"opcje": ["a. print()", "b. input()", "c. get()"],
"odpowiedz": "b"
},
"pytanie10": {
"tresc": "Jaką wartość będzie mieć zmienna x po wykonaniu poniższego kodu ? x = 10 x +=5",
"opcje": ["a. 5", "b. 10", "c. 15"],
"odpowiedz": "c"
}
}
wyniki_uczestnikow = {}
imie = input("Wpisz swoje imię: ")
#Zmienna do zliczania punktów
punkty = 0
#Pytanie 1
print(pytania["pytanie1"]["tresc"])
print(pytania["pytanie1"]["opcje"][0])
print(pytania["pytanie1"]["opcje"][1])
print(pytania["pytanie1"]["opcje"][2])
odpowiedz_uzytkownika1 = input("Twoja odpowiedź: ")
if odpowiedz_uzytkownika1 == pytania["pytanie1"]["odpowiedz"]:
punkty+=1
print("Poprawna odpowiedź")
else:
print("Błędna odpowiedź")
#Pytanie 2
print(pytania["pytanie2"]["tresc"])
print(pytania["pytanie2"]["opcje"][0])
print(pytania["pytanie2"]["opcje"][1])
print(pytania["pytanie2"]["opcje"][2])
odpowiedz_uzytkownika2 = input("Twoja odpowiedź: ")
if odpowiedz_uzytkownika2 == pytania["pytanie2"]["odpowiedz"]:
punkty+=1
print("Poprawna odpowiedź")
else:
print("Błędna odpowiedź")
#Pytanie 3
print(pytania["pytanie3"]["tresc"])
print(pytania["pytanie3"]["opcje"][0])
print(pytania["pytanie3"]["opcje"][1])
print(pytania["pytanie3"]["opcje"][2])
odpowiedz_uzytkownika3 = input("Twoja odpowiedź: ")
if odpowiedz_uzytkownika3 == pytania["pytanie3"]["odpowiedz"]:
punkty+=1
print("Poprawna odpowiedź")
else:
print("Błędna odpowiedź")
#Pytanie 4
print(pytania["pytanie4"]["tresc"])
print(pytania["pytanie4"]["opcje"][0])
print(pytania["pytanie4"]["opcje"][1])
print(pytania["pytanie4"]["opcje"][2])
odpowiedz_uzytkownika4 = input("Twoja odpowiedź: ")
if odpowiedz_uzytkownika4 == pytania["pytanie4"]["odpowiedz"]:
punkty+=1
print("Poprawna odpowiedź")
else:
print("Błędna odpowiedź")
wyniki_uczestnikow[imie] = punkty
print(f"Twój wynik to: {wyniki_uczestnikow[imie]}")