Python zajęcia 4

Python zajęcia 4
Photo by Markus Spiske / Unsplash

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.6666666666668

SŁ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]}")