def ile_sekund_do_konca_minuty():
    from datetime import datetime
    return 60 - datetime.now().second

# Przykład typowej funkcji matematycznej: argument i wynik są liczbami
# Dla podanej liczby x wynikiem jest x do kwadratu
def kwadrat(x):
    return x*x

# Wewnątrz funkcji return nie musi być ostatnią instrukcją i może występować w kilku miejscach.
# Wtedy, gdy funkcja dojdzie do linii, w której jest return, zwraca podany wynik i natychmiast się kończy.
def stawka_za_prace(stawka_podstawowa, dzien_tygodnia):
    if 1 <= dzien_tygodnia <= 5:
        return stawka_podstawowa
    if dzien_tygodnia == 6:
        return 1.5 * stawka_podstawowa
    if dzien_tygodnia == 7:
        return 2 * stawka_podstawowa

# W Pythonie bardzo łatwo pisze się funkcje, które 'na intuicję' zwracają kilka wartości na raz
# Technicznie zwracana jest krotka (tuple)
def dzielenie_z_reszta(x, y):
    return x // y, x % y


print('Funkcje zdefiniowane, początek właściwego programu')
print('Uruchomię teraz funkcję ile_sekund_do_konca_minuty po raz pierwszy:')
# Jeśli tylko wywołamy fukcję, która zwraca wynik, ale niczego z tym wynikiem nie zrobimy,
# to ten wynik nigdzie się nie wypisze.
# RETURN TO NIE TO SAMO CO PRINT!
ile_sekund_do_konca_minuty()

print('Uruchomię teraz zapisując wynik do zmiennej.')
ile_sekund = ile_sekund_do_konca_minuty()
print('Wynikowa zmienna ma wartość:', ile_sekund)

print(f'Teraz wypiszę wynik bezpośrednio tutaj: {ile_sekund_do_konca_minuty()}')
print("\n================\n")

wynik = kwadrat(5)
print('Wynikiem operacji 5² jest', wynik)
print('6² =', kwadrat(6))
# Ale samomo wywołanie funkcji, bez przejęcia wyniku, nie wypisze go ekran.
kwadrat(7)
print(f'{wynik}² = {kwadrat(wynik)}')
print("\n================\n")

print('środa:', stawka_za_prace(100, 3))
print('sobota:', stawka_za_prace(100, 6))
print('niedziela:', stawka_za_prace(100, 7))

# Jeśli podczas wykonania funcji nie zostanie wykonany żaden return,
 # to w Pythonie przyjmuje się, że funkcja zwraca wynik None
print('poza zakresem:', stawka_za_prace(100, 8))
print("\n================\n")

tupla = dzielenie_z_reszta(13, 5)
print(tupla, 'typu', type(tupla))
print('iloraz:', tupla[0], 'reszta:', tupla[1])

# "upacking":
a, b = dzielenie_z_reszta(77, 5)
print('iloraz:', a, 'reszta:', b)
