Python - zajęcia 4

Struktury danych:

  • służą do organizacji danych,
  • pozwalają przechowywać dużą ilość danych przy ograniczeniu ilości zmiennych, analogią mogą być np. kubek na kawę lub skrzynka narzędzi,
  • powinna być dobrana z myślą o celu.

Rodzaje struktur:

  • lista
  • słownik
  • krotka

Listy i krotki

Podobieństwa:

  • służą do przechowywania danych jeden po drugim, w zorganizowany sposób (każdy element ma indeks zaczynający się od 0)
  • mogą posiadać duplikaty
  • w obu przypadkach można się przemieszczać po ich elementach (można wybrać dowolny element)

Różnice:

Listy:
  • są modyfikowalne - można dodawać/odejmować elementy
  • często przemieszczamy się po elementach
  • raczej nie sięga się po elementy ze środka list
  • dobrą analogią są książki na półce
  • deklaracja - użycie nawiasów kwadratowych, np:
moje_ksiazki = ["Blade Runner", "Hobbit", "Unicorn Project"]
  • Najlepiej nie mieszać typów zmiennych w liście
Krotki:
  • nie są modyfikowalne
  • stała długość
  • częściej sięgamy po elementy znajdujące się gdzieś głęboko
  • analogia - kategorie w menu restauracji
  • deklaracja - użycje nawiasów okrągłych
kategorie_menu={"przystawki", "zupy", "dania główne", "desery")
  • dozwala się użycie różnych typów zmiennych
ubrania=("sukienka", "spodnie", "croptop", "t-shirt", "golf")
print(ubrania[-1]) #pokazuje ostatni element

Można wyświetlać część elementów listy/krotek:

moja_zmienna[start:koniec]

Metody - funkcje przypisane do konkretnego obiektu (np. .append() jest przypisany do list)

nazwa_zmiennej.nazwa_metody(atrybuty)

Wybrane metody dla list i krotek:

Słownik:

  • bardziej zaawansowana struktura niż słowniki lub krotki, umożliwia odnalezienie zawartości z pomocą klucza przypisanego do niej, deklaracja:
moj_slownik={klucz:wartosc}

np.

moj_slownik={"klucz1":"wartosc1", "klucz2":"wartosc2"}
  • kluczem mogą być np. teksty, liczby, krotki, ale uwaga na krotki, bo jak ma jakiś modyfikowalny element, to przestaje się nadawać na klucz

Zbiory

  • są podobne do listy, deklaracja:
moj_zbior={unikat1, unikat2, unikat3}

Ale w zasadzie to po co nam to?

  • jak mamy listę z masą duplikatów to możemy ją zamienić na zbiór i z powrotem na listę i wtedy znikają duplikaty,
  • to takie "słowniki, które mają tylko klucze".

Obiekty modyfikowalne/niemodyfikowalne:

Zadanie z ekwipunkiem:

## zadanie z ekwipunkiem
ekwipunek=["tarcza", "miecz", "napój leczący"]
ekwipunek.append("magiczny pył")
print(ekwipunek)
if "magiczny pył" and "napój leczący" in ekwipunek:
    ekwipunek.append("większy napój magiczny")
    ekwipunek.remove("magiczny pył")
    ekwipunek.remove("napój leczący")
    print(ekwipunek)

Kwestionariusz:

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

Propozycja:

  • lista słowników - lista powoduje, że domyślnie pytania będą zadawane za każdym razem w tej samej kolejności, każdy słownik odnosiłby się do innego pytania, co pozwala na przechowywanie pytań i odpowiedzi w jednym miejscu, kluczami w tym słowniku mogłyby być pytanie, odpowiedzi i prawidłowa odpowiedź (i potencjalnie liczba punktów?)

quiz=[
    {
        "pytanie":"W którym roku była bitwa pod Grunwaldem?", 
        "odpowiedzi":["1410", "1395", "1402"],
        "prawidlowa":"1410"
        },
    {
        "pytanie":"w którym roku został opublikowany Python?",
        "odpowiedzi":["1991", "1992", "1993"],
        "prawidlowa":"1991"    
    },
    {
        "pytanie":"Ile minut ma doba?",
        "odpowiedzi": ["3600", "1440", "2160"],
        "prawidlowa":"1440"
    },
    {
        "pytanie":"Taumatawhakatangihangakoauauotamateaurehaeaturipukapikimaungahoronukupokaiwhenuakitanatahu jest to nazwa miejscowości która znajduje się w:",
        "odpowiedzi":["Polska", "Papua Nowa Gwinea", "Nowa Zelandia"],
        "prawidlowa":"Nowa Zelandia"
    },
    {
        "pytanie":"Kto jest obecnie prezydentem Polski?",
        "odpowiedzi":["Karol Nawrocki", "Andrzej Duda", "Daniel Magical"],
        "prawidlowa":"Karol Nawrocki"

    }
    ]
for pytanie in quiz:
    print("\n", pytanie["pytanie"])
    print("\n", pytanie["odpowiedzi"])
    odpowiedz=input()
    if odpowiedz==pytanie["prawidlowa"]:
        print("Prawidłowa odpowiedź")
        pkt+=1
    else:
        print("Nieprawidłowa odpowiedź")
print("Twoja liczba punktów to", pkt)

Wiki kursowe:

Python | Robisz.to Wiki
krótkie notatki służące pomocy w zaczęciu z programowaniem w języku Python.