lista = [1,2,3,4,5,6,7,8,9,10]
kwadraty = [i**2 for i in lista]
print(lista)
print(kwadraty)

# zadanie: stwórz w ten sposób krotkę, zbiór oraz słownik


kwadraty_krotka = (i**2 for i in lista)
print(kwadraty_krotka)
kwadraty_zbior = {i**2 for i in lista}
print(kwadraty_zbior)
kwadraty_slownik = {i:i**2 for i in lista}
print(kwadraty_slownik)
kwadraty_test = tuple(i**2 for i in lista)
print(kwadraty_test)

podwojenia = {i:2*i for i in range(21)}
print(podwojenia)

kwadraty_liczb_parzystych = {i:i**2 for i in range(21) if i%2==0}
print(kwadraty_liczb_parzystych)

panstwa = ["Polska", "Niemcy", "Francja", "Hiszpania"]
stolice = ["Warszawa", "Berlin", "Paryz", "Madryt"]

informacje = [f"{stolica} to stolica kraju: {panstwo}" for panstwo,stolica in 
              zip(panstwa, stolice)]
for info in informacje:
    print(info)

# Na podstawie podanej listy slowa = ["ala", "kot", "pies", "kamilslimak",
# "zebra", "madam", "Adam"] stwórz listę zawierającą same palindromy
slowa = ["ala", "kot", "pies", "kamilslimak", "zebra", "madam", "Adam"]
palindromy = [slowo for slowo in slowa if slowo == slowo[::-1]]
print(palindromy)

# Na podstawie listy krotek zawierającej długości boków trójkąta stwórz listę
# zawierającą tylko krotki z których można skonstruować trójkąt (warunek -
# najdłuższy bok musi być krótszy niż suma dwóch pozostałych).

trojkaty = [(1, 3, 5), (2, 2, 3), (3, 1, 8), (3, 4, 5)]
poprawne_trojkaty = [trojkat for trojkat in trojkaty if 2*max(trojkat) < sum(trojkat)]
print(poprawne_trojkaty)


#WYJĄTKI

try:
    # Fragment kodu sprawdzany pod względem wyjątków
    pass
except Exception as e:
    # Kod wykonujący się w przypadku wystąpienia wyjątku
    pass
else:
    # Kod wykonywany, jeśli nie zgłoszono wyjątku
    pass
finally:
# Kod wykonywany zawsze, niezależnie od wystąpienia wyjątku
    pass

# 1. Napisz funkcję dzielenie i mnożenie przyjmującą dwie wartości a i b,
#  która wyświetli wynik działania a/b i a *b. Co się wydarzy jeżeli nie
# zaimplementujemy obsługi wyjątków i spróbujemy dzielić przez 0?

def dzielenie_i_mnozenie(a, b):
    try:
        a/b
    except Exception as e:
        print(e)
    else:
        print(f"Wynik z dzielenia {a} / {b} = {a/b}")
    finally:
        print(f"Wynik z mnożenia {a} * {b} = {a*b}")

dzielenie_i_mnozenie(5, 2)
dzielenie_i_mnozenie(0, 2)
dzielenie_i_mnozenie(5, 0)

# Napisz funkcję dodawanie, która przyjmuje dwa argumenty a i b
# oraz wyświetla ich sumę. Co się wydarzy jeżeli jako argument podamy 
# inta i stringa?
def dodawanie(a, b):
    try:
        a+b
    except Exception as e:
        print("Typy są niezgodne")
    else:
        print(f"Wynik dodawania {a} + {b} = {a+b}")

dodawanie("5", 5)
dodawanie(5, 5)
dodawanie("5", "5")

# Stwórz funkcję dzielącą zdanie na wyrazy. Prawidłowe zdanie powinno 
# zaczynać się od wielkiej litery i kończyć kropką. W razie niespełnienia 
# wymogów poprawnego zdania podniesiony powinien zostać wyjątek z informacją
# o wymaganej korekcie.

def zdanie_na_wyrazy(zdanie):
    try:
        if not zdanie[0].isupper():
            raise Exception ("Zdanie musi zaczynać się wielką literą")
        elif zdanie[-1] not in [".", "?", "!"]:
            raise Exception ("Zdanie musi zakończyć się znakiem interpunkcyjnym")
    except Exception as e:
        print(e)
    else:
        print(zdanie.split(" "))
    finally:
        print("Koniec programu.")

zdanie_na_wyrazy("ala ma kota")
zdanie_na_wyrazy("Ala ma kota")
zdanie_na_wyrazy("ala ma kota.")
zdanie_na_wyrazy("Ala ma kota.")

# ZADANIA
# 1
# Stwórz listę temperatury w stopniach Farenheita, następnie 
# przelicz ją na Celciusza i zapisz w nowej liście
# (F - 32)*5/9 = C

# 2
# Z podaniego ciągu znaków usuń wszystkie nie będące cyframi lub literami
# char.isalpha()
string = "hello@134world.com"