Lekcja 4 - Struktury i metody KP

Lekcja 4 - Struktury i metody KP
Photo by Kara Eads / Unsplash

Struktury - służą do przechowywania danych np. Listy i krotki

Listy i krotki podobieństwa: elementy mają przypisany indeks (istotna kolejność), można się przemieszczać po nich, mogą posiadać duplikaty

Różnice

Listy: nawiasy kawdratowe [], modyfikowalne, często przemieszczamy się po ich elementach, unikamy sięgania do elementów ze środka

Krotki: nawiasy okrągłe (), nie modyfikowalne, są stałej długości więc często sięgamy do ich środka

Zestawiając do tabeli: krotka - nagłówki, kolejne wierze, które modyfikujemy, dokładamy - listy

Indeksy -> pozycja elementu listy, krotki ->  zacznają się od zer -> można się cofać -> wpisując -1 dostajemy ostatni element -> indeks podajemy w nawiasach kwadratowych

Wycinanie zakresów elementów -> zmienna[start:koniec] -> zmienna[:2] (efekt: elementy: 0, 1, 2 i 3) -> zmienna[2:] (efekt: elementy od 3 do końca)

Rozpakowanie -> kolejne elementy przyporządkowujemy do zmiennych

Metody - funkcje przypisane do obiektu -> schemat używania metod -> nazwa_zmiennej.nazwa_metody(parametry) -> nawet jeśli metoda nie potrzebuje parametru to nawiasy musza się pojawaić

Lista.append(nowy_element) <- do listy doda nam wskazany z nawiasu element

Metody krotek i list:

.pop bez argumentu – usuwa ostatni element

.append – można wkleić np. liste w liste, ale ta lista jest wtedy pojedynczym elementem (czyli wstawiamy jeden element, który składa się z innych)

lista = [1, 2]
lista.append([2,3])
print (lista)

Otrzymujemy:

Można dodawać listy

lista = [1, 2]
lista2 = [5, 6]
print (lista + lista2)

Wynik:

SŁOWNIKI - struktura danych - umożliwiają szybkie odnalezienie wartości za pomocą klucza.

Klucz musi być unikalny w słowniku. Klucz musi być obiektem nie modyfikowalnym czyli: string, liczba, krotka ale wyłącznie jeśli nic w niej nie możemy zmienić (Czyli nie może zawierać obiektu modyfikowalnego)

W wartości może być np. lista

Dobra praktyka: Jeśli wybierzemy klucz to schematu trzymamy się przez cały słownik np. wybierając PESEL nie wybieramy później nazwiska

Wykorzystanie: tytuł książki - klucz, wartość - treść

Dodanie kolejnego elementu do słownika:

Metody:

ZBIORY – słowniki posiadające same klucze, nie ma dubli . Nie można sięgać po element po indeksie -> nawiasy klamrowe {} -> zbiory nie mają indeksu, nie pilnują kolejności

Zadanie domowe:

  1. Stworzenie słownika z samymi pytaniami {"pyt1": treść pytania} ->  dzięki temu można losować pytania, a później odwołać się do tego które nas interesuje.  W liście musiałabym się odwołać po indeksach, przez co ciężej byłoby losować pytania
  2. Stworzenie słownika z listami odpowiedzi, gdzie zawsze pierwsza odpowiedź jest poprawna. Wartości w liście, aby można było się odnieść do ich indeksu {"pyt1":[odp poprawna, odp niepoprawna]
  3. Losowanie pytania -> nr = random.randint(1, 5) -> wybiera losowy numer pytania, które może wypisać -> print(quiz[f"pyt{nr}"])
  4. Analogicznie wybiera losowa cyfrę z odpowiedziami, czyli zawsze nam wyrzuci odpowiedzi w tej samej kolejnosci, ale zaczynajac od innej. Wyświetlanie pętlą? (bo są różne ilości odpowiedzi, w przypadku tej samej ilości można bez pętli)
  5. Szukając prawidłowej odpowiedzi trzeba wziąć pod uwagę przesunięcie wyświetlanych odpowiedzi o losową cyfrę

Pytania wielokrotnego wyboru -> można stworzyć listę poprawnych odpowiedzi i sprawdzić ile elementów się zgadza z wybranymi odpowiedziami przez użytkownika. Ilość porównań wynika z ilości odpowiedzi wskazanych przez użytkownika (długość stringa), więc porównanie za pomocą pętli odwołując się do kolejnych indeksów

Przykładowe programy:

  1. Sprawdzenie czy element jest na liście
lista = ["a", "b", "c", "d"]

if lista.count("c")> 0:
    print ("Istnieje 'c' na liście")
  1. Zliczanie ilości słów
zdanie = input("Prosze wprowadzic zdanie: \n")
zawartosc_zdanie = zdanie.split() #dzieli zdaine po spacjach
slowa = len(zawartosc_zdanie)

if slowa == 1:
    print("Twoje zdanie sklada sie z jednego slowa")
else:
    print(f"Twoje zdanie składa sie z {slowa} słow")