Python - zajecia 4
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 danychIndeksy 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 Potterubrania = ("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]) #Obsesjazakupy = ["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)```