Python - zajecia 4

Python - zajecia 4
Photo by Resource Database / Unsplash

Struktury danych - sposoby przechowywania danych np. w formie listy. Coś jak lista zakupów, które chcemy kupić. Lub pojemnik np. kubek. Pojemnik niesie nam za sobą informację o tym co będzie w środku. W kubku z napisem kawa z dużym prawdopodobieństwem będzie płyn. Natomiast w skrzynce narzędziowej znajdą się narzędzia. Warto trzymać porządek w kodzie tak samo jak w skrzynce narzędziowej ;) Prawie jak w żarcie - gdzie jest herbata? W apteczce w pudełku po kawie z napisem "kakao".

Listy i krotki (tuple):
-są podobne na pierwszy rzut oka
- każdy element ma indeks (od 0)
- mogą być duble
- możemy wybrać dowolny element listy lub krotki

ALE! Są różnice!

Listy:
- modyfikowalne (mutable) czyli możemy dodawać/odejmować elementy
- rzadko sięgamy po elementy będące w środku listy
- przemieszczamy się po elementach
- przykładem może być półka z książkami
- raczej unikamy mieszania typów na liście
- deklaruje się je kwadratowymi nawiasami []

Przykład:

fantastyka = ["Blade Runner", "Hobbit", "Unicorn Project"] #lista
print(fantastyka)
print(type(fantastyka)) #wyswietli typ
fantastyka.append("Hobbit") # dodanie do listy
print(fantastyka)
fantastyka = ["Blade Runner", "Hobbit", "Unicorn Project"]
ksiazki_it = ["Unicorn", "Python"]
all = fantastyka + ksiazki_it
print(all)
#wlasna lista
apps = ["CC Manager", "Corsac", "Alfa"]
print(apps)
apps.append("VRC") #dodawanie do listy
print(apps)
#laczenie dwoch list w jedna
zakupy_chemia = ["domestos", "cif", "plyn do naczyn"]
zakupy_jedzenie = ["jablka", "gruszki", "melon"]
zakupy_all = zakupy_chemia + zakupy_jedzenie
print(zakupy_all)

Krotki(tuple)
-nie są modyfikowalne
- ich długość jest stała więc częściej sięgamy po elementy ze środka
- przykładem mogą być kategorie w menu: zupy, przystawki, desery
- deklaruje się je poprzez nawiasy okrągłe ()
- mogą zawierać różne typy danych np. rodzaj narzędzia oraz zadawane obrażenia

Przykłady:

mytuple = (1, 2, 3, 4)
print(mytuple)
print(type(mytuple))

topor = ("ciezki topor", 100) #rozne typy danych

Indeksy liczone są od 0. Możliwe jest sięganie wstecz przy użyciu indeksów ujemnych.

moja_lista = ["item1", "item2", "item3"]
print(moja_lista[2]) #wyswietli item3

moje_ksiazki = ("Blade runner",
                "Hobbit",
                "Conan",
                "Harry Potter",
                "Kain i ABel")
print(moje_ksiazki[-2]) #wyswietli sie Harry Potter
ubrania = ("Koszulki"
           "Spodnie",
           "Bluzy",
           "Skarpety",
           "Koszule")
print(ubrania[-1]) #wyswietli sie pozycja "koszule"

Cięcie list i krotek

print(moja_lista[1:3])
ubrania = ("Koszulki"
           "Spodnie",
           "Bluzy",
           "Skarpety",
           "Koszule")
print(ubrania[-1])
print(ubrania[1:4]) #('Bluzy', 'Skarpety', 'Koszule')


Metody dla list i krotek(tuple)
Metody to wbudowane funkcje. Wywołuje się je poprzez wpisanie nazwy zmiennej, postawienie kropki i wstawienie parametrów do metody w okrągłych nawiasach (vs podpowiada metody dla danego typu zmiennej).
Przykładowe metody dla krotek: .count(), .index()
Przykładowe metody dla list: .count(), .index(), append(), .pop(), .sort(), .copy()

zakupy = ["miod", "pieprz", "jogurt", "salata"]
zakupy.append("mango") #dodanie mango do listy
print(zakupy) #wyswietla liste
print(zakupy.index("pieprz")) #wyswietlenie indeksu: 1
print(zakupy[1:3])

Słowniki (dictionary)
- umożliwiają szybkie odnalezienie jakiejś wartości za pomocą wartości klucza przypisanego do niej (to co mam w pracy - id_key, user_agent_key.
-kluczem w słowniku nie może być lista ani inny słownik, ponieważ klucz musi być unikalny. Ale może być krotka (tuple), bo jest niezmienna.
Deklarowanie słownika -> moj_slownik = {klucz:wartość}

Przykład:

id_alfa = {"klucz_agenta1":"nr_agenta1", "klucz_agenta2":"nr_agenta2"}
print(id_alfa)
moj_slownik1 = { "klucz1": "wartość1", "klucz2": "wartość2", }
moj_slownik2 = { "zwierze1": "pies", "zwierze2": "chomik", }
scalony = {**moj_slownik1, **moj_slownik2}
print("Scalony:")
print(scalony)
print("\n************\n")
print("Moj_slownik1:")
print(moj_slownik1)
print("\n************\n")
print("moj_slownik2:")
print(moj_slownik2)

Wybrane metody dla słowników:
.keys() zwraca listę kluczy słownika
.values() zwraca listę wartości słownika
.pop() usuwa element o podanym kluczu
.items() zwraca listę tupli dla każdej pary klucz:wartość
.get() zwraca wartość dla danego klucza


Zbiory (set)
- nie mają dubli! (mając listę możemy zmienić ją na set żeby pozbyć się dubli)
- struktura danych nieuporządkowana
- nie ma indeksów
- taki trochę dziwny słownik z kluczami ;)

zakupy = ["mleko", "jajka", "bekon", "bekon", "jajka"]
prosty_zbior = set(zakupy)
print(prosty_zbior)
print(type(prosty_zbior))

lista_bez_powtorzen = list(prosty_zbior)
print(lista_bez_powtorzen)
print(type(lista_bez_powtorzen))

Ćwiczenia ze struktur danych:

my_books = [
    "Harry Potter",
    "Igrzyska Śmierci",
    "Finansowa Forteca",
    "Jano i Wito",
    "W krainie bajek:,"
    "Wladca pierscieni",
    "Obsesja"
]

#wyświetl pierwszą książkę
print(my_books[0]) #Harry Potter

#wyswietl ostatnią książkę
print(my_books[-1]) #Obsesja

zakupy = ["bazylia", "oregano", "pieprz", "sol", "jogurt", "salata"]
###dodaj mango
zakupy.append("mango")
print(zakupy)

#kolejne printy wykonywane sa dla listy z dodanym mango

print(zakupy[1:3])
print(zakupy[1:])  #oregano', 'pieprz', 'sol', 'jogurt', 'salata', 'mango'
print(zakupy[1:-1]) #oregano', 'pieprz', 'sol', 'jogurt', 'salata
print(zakupy[1::2]) #oregano', 'sol', 'salata' - wyswietla sie co drugi element
print(zakupy.index("pieprz")) #2


#Zliczanie ilosci wystapien
print("Czy mango jest na liscie?")
print(zakupy.count("mango"))
print("TAK!! Jest mango")

#laczenie list

zakupy_chemia = ["domestos", "cif", "calgon", "vizir"]
zakupy_all = zakupy1 + zakupy_chemia
print(zakupy_all)
#zagnieżdżenie listy w liście (można też w krotce)
pet = ["pies", "kot", ["danio", "neonki", "karpie"]]

print(pet[2]) 
print(pet[2][1])
##wyswietl 3 ostatnie elementy listy i 2 ostatnie elementy krotki

moja = ["a", "b", "c", "d", "e", "f"]
print(moja[3:])
tup = ("1","2","3","4","5","6")
print(tup[4:])

# # a jak wyswietlic 3 litere ponizszego ciagu znaków?
tekst = "Lorem ipsum"
print(tekst[2])

# # jak wyswietlic drugi element listy? (czyli orange)
mojalista = ["red", "orange", "green", "blue", "white"]
print(mojalista[1])

# # jak wyswietlic "orange", "green", "blue"?
print(mojalista[1:4])

# # jak wyświetlić ostatni element?
print(mojalista[-1])

moje_zakupy = ["miód", "pieprz", "jogurt", "sałata", "mango"]
print(moje_zakupy[-1])


# # jak zamienić "mango" na "jabłka"?
moje_zakupy[-1] = "jabłka"
print(moje_zakupy)

# # jak spradzić czy na liście jest "sól"? 
moje_zakupy = ["miód", "pieprz", "jogurt", "sałata", "mango"]
if "sol" in moje_zakupy:
    print("Jest sol.")
else:
    print("Nie ma soli. KUP!")

# # # ile elementów ma poniższa lista? czy jest poprawna?
mojalista2 = [(2, 5), (1, 2), (4, 4), (2, 3), (2, 1)] #lista tupli
print
print(len(mojalista2))

# # czy poniższa operacja będzie ok?
mojalista = ["red", "orange", "green", "blue", "white"]
print(f"Przed append: {mojalista}")
mojalista.append("black")
print(f"Po append: {mojalista}")

##Przed append: ['red', 'orange', 'green', 'blue', 'white']
#Po append: ['red', 'orange', 'green', 'blue', 'white', 'black']


# # czy poniższa operacja będzie ok?
mojalista = ["a", "b", "c", "d", "e"]
mojalista += ["white"]
print(mojalista)
print(f"Ta lista ma {len(mojalista)} elementów.") # 6 elementow

# # # czy poniższa operacja będzie ok? A jeśli tak - jaki będzie wynik?
mojalista = ["a", "b", "c", "d", "e"]

mojalista.append("black")
print(mojalista) #['a', 'b', 'c', 'd', 'e', 'black']

# # # czy poniższa operacja będzie ok?
mojalista = ["a", "b", "c", "d", "e"]
mojalista.pop(1)
print(mojalista) #['a', 'c', 'd', 'e']


# # czy poniższa operacja będzie ok?
mojalista = ["a", "b", "c", "d", "e"]
mojalista += [2]
print(mojalista) #['a', 'b', 'c', 'd', 'e', 2]

# # # czy poniższa operacja będzie ok?
mojalista = ["a", "b", "c", "d", "e"]
mojalista += (1, 2, 3) #TUPLE
print(mojalista) #['a', 'b', 'c', 'd', 'e', 1, 2, 3]


# # czy poniższa operacja będzie ok?
mojalista = [1, 2, 3]
mojalista2 = [3, 4]
sklejone = mojalista + mojalista2
print(sklejone) #[1, 2, 3, 3, 4]
# # 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 "magic dust" in ekwipunek and "mana potion" in ekwipunek:
    ekwipunek.append("greater mana potion")
    print(ekwipunek)
    print("Masz super potionka!")
# # czy poniższa operacja będzie ok?
mojakrotka= (1, 2, 3)
mojakrotka2 = (3, 4)
sklejone = mojakrotka + mojakrotka2
print(sklejone) #(1, 2, 3, 3, 4)

```