#Deklaracja krotki
krotka = (4, 2, 11, 3, 4)
krotka_jednoelementowa = (5,)
print(krotka)
#Wyciek krotki
print(krotka[1:4])
#Element krotki
print(krotka[0])

#Metody krotek
#count - zliczanie elementów o danej wartości w krotce
print("Zliczanie elementów o wartośći 4:")
print(krotka.count(4))

#index - znalezienie indexu pierwszego elementu o podanej wartości
print("Znalezienie pierwszego indexu o wartości 4: ")
print(krotka.index(4))


#Tworzenie zbiorów
zbior = {1, 2, 3, 4}
pusty_zbior = set()
print(zbior)

#Metody zbiorów
#Dodawanie elementów add()
zbior.add(9)
print("Zbiór po dodaniu elementu: ")
print(zbior)

#Usuwanie elementu remove()
zbior.remove(1)
print("Zbiór po usunięciu elementu: ")
print(zbior)

#Usunięcie elementu jeżeli istnieje dicdard()
zbior.discard(44)
print("Zbiór po próbie usunięcia nieistniejącego elementu")
print(zbior)

#Usunięcie i zwrócenie elementu ze zbioru pop()
losowy_element = zbior.pop()
print(f"Usunięto element {losowy_element} ze zbioru {zbior}")

#Usunięcie wszystkich wartości ze zbioru clear()
zbior.clear()
print("Wyczyszczony zbiór")
print(zbior)

#Konwersje między strukturami
zbior = {1, 2, 3}
krotka = (4, 5, 6)
lista = [7, 8, 8, 9]

print("Konwersja zbioru na listę: ")
print(list(zbior))
print(type(list(zbior)))

print("Konwersja krotki na listę: ")
print(list(krotka))
print(type(list(krotka)))

print("Konwersja zbioru na krotki: ")
print(tuple(zbior))
print(type(tuple(zbior)))

print("Konwersja listy na krotki: ")
print(tuple(lista))
print(type(tuple(lista)))

print("Konwersja krotki na zbiór: ")
print(set(krotka))
print(type(set(krotka)))

print("Konwersja listy na zbiór: ")
print(set(lista))
print(type(set(lista)))


#Zadania

#Stwórz krotkę, listę, słownik i zbiór zawierający po 3 elementy.
krotka = (2,5,1)
lista = [3,0,1]
slownik = {"klucz1" : 1,
              "klucz2": 12,
              "klucz3":1}
zbior = {5,3,9}

#Za pomocą funkcji len() sprawdź długości poszczególnych obiektów
print(f"Dlugosc listy {len(lista)}")
print(f"Dlugosc zbioru {len(zbior)}")
print(f"Dlugosc krotki {len(krotka)}")
print(f"Dlugosc slownika {len(slownik)}")

#Za pomocą pętli for wypisz wszystkie elementy każdego z obiektów
print("Elementy listy")
for i in lista:
    print(i)

print("Elementy zbioru")
for i in zbior:
    print(i)

print("Elementy krotki")
for i in krotka:
    print(i)

print("Elementy slownika")
for i in slownik:
    print(i)

#Teraz wypisz wartości słownika zamiast kluczy

print("Wartosci slownika")
for i in slownik.values():
    print(i)

#Wypisz te same elementy w odwróconej kolejności, 
# czy zawsze jest to możliwe bezpośrednio?
#W razie problemów skorzystaj z pomocy chatuGPT
print("Elementy listy")
for i in lista[::-1]:
    print(i)

print("Elementy zbioru")
for i in list(zbior)[::-1]:
    print(i)

print("Elementy krotki")
for i in krotka[::-1]:
    print(i)

print("Elementy slownika")
for i in list(slownik)[::-1]:
    print(i)

#Dodaj do listy elementy z krotki, zbioru i wartosci slownika
lista.extend(zbior)
lista.extend(krotka)
lista.extend(slownik.values())
print(lista)

#Dodaj do listy 2 liczby - wartosc maksymalna i minimalna listy
lista.append(min(lista))
lista.append(max(lista))
print(lista)

#Sprawdz dlugosc listy
print(f"Dlugosc listy {len(lista)}")

#Zamien liste na krotke - krotka2 i sprawdz jej dlugosc
krotka2 = tuple(lista)
print(krotka2)
print(f"Dlugosc krotki {len(krotka2)}")

#Zamien krotke na zbior - zbior2 i sprawdz jego dlugosc
zbior2 = set(krotka2)
print(zbior2)
print(f"Dlugosc zbioru {len(zbior2)}")