Funkcje
Wyobraź sobie, że piszesz program, w którym definiujesz dwie zmienne liczbowe, a potem sprawdzasz, czy zmienne są parzyste. Na końcu wyświetlasz komunikat o tym, czy liczba jest, czy nie jest parzysta.
Oto przykład:
num1 = 2
num2 = 5
if num1 % 2 == 0:
print("liczba", num1, "jest parzysta")
else:
print("liczba", num1, "jest nieparzysta")
if num2 % 2 == 0:
print("liczba", num2, "jest parzysta")
else:
print("liczba", num2, "jest nieparzysta")
Oto przykład funkcji:
To co powyżej zadziała, ale jest nieefektywne, bo:
- dwa razy piszemy praktycznie ten sam kod – osobno sprawdzamy num1 i num2, warunki i komunikaty, które są wyświetlane są identyczne,
- jest to podatne na błędy – zawsze może zdarzyć się literówka albo pojedynczy znak równości w operatorze przyrównania (częsty błąd i trudny do zauważenia).
Po co są funkcje?
Najlepszym rozwiązaniem byłoby zapisanie „na boku” kodu, który sprawdza parzystość liczby i użycie go, gdy zajdzie potrzeba. Takie rozwiązanie jest możliwe! Nazywa się to funkcją i jest podstawą programowania. Zamiast pisać kilka razy do samo, możemy wziąć kod, którego chcemy użyć wielokrotnie i przerobić go na funkcję:
Oto przykład:
def check_even(num):
if num % 2 == 0:
print("liczba", num, "jest parzysta")
else:
print("liczba", num, "jest nieparzysta")
Deklaracja funkcji
Funkcję zaczyna się deklaracją, która składa się z:
- komendy def,
- obowiązkowej nazwy funkcji (tu: check_even). Możesz nazwać funkcję dowolnie; zasady są takie, jak przy nazywaniu zmiennych (por. lekcja 1).
- następnie w nawiasach możesz, jeśli potrzebujesz, podać tzw. parametry funkcji; parametr to taka zmienna, którą przekazujesz do funkcji i możesz wykorzystać ją wewnątrz niej; jeśli nie potrzebujesz przekazać
Po deklaracji, w bloku kodu (pamiętaj o wcięciu) umieszczasz komendy, które wykonają się po wywołaniu tej funkcji.
Reszta naszego programu będzie wyglądała następująco:
num1 = 2
num2 = 5
check_even(num1)
check_even(num2)
Oto przykład deklaracji funkcji:
Proste, prawda?
To jeszcze nie wszystko!
Czasami chcemy, żeby funkcja np. coś policzyła, a wynik przekazała do dalszej obróbki. Na przykład mamy listę, w której znajdują się ceny produktów w koszyku. Chcemy obliczyć sumę tych liczb i zwrócić ją programiście, a ten wykorzysta to dalej.
Oto przykład:
def sum_prices(nums): # nums to lista
result = 0
for element in nums:
result += element
return result
Przypisanie wartości funkcji
Co tu się dzieje?
- definiujemy funkcję, którą nazywamy sum_prices. Ta funkcja przyjmuje parametr, o nazwie nums. Dla ułatwienia, zakładamy, że programista zawsze będzie podawał tam listę z liczbami.
- deklarujemy zmienną result, która na początku działania funkcji będzie miała wartość 0. Do tej wartości będziemy dodawać kolejne liczby z listy.
- tworzymy pętlę, która przejdzie nam przez wszystkie elementy listy nums, każdy kolejny element doda do zmiennej result. W rezultacie po zakończeniu działania pętli wartość zmiennej result, będzie sumą wszystkich elementów listy nums.
- ostatnią linijką naszej funkcji jest instrukcja return result. Oznacza to, że funkcja ma zwrócić programiście wartość tej zmiennej.
Jak to wykorzystać?
Możemy teraz wywołać funkcję sum_prices, a jej wynik przypisać do zmiennej:
Oto przykład:
my_list = [99.99, 119.99, 49.99, 29.99]
my_sum = sum_prices(my_list)
print(“Cena zakupów wynosi”, my_sum, “zł.”)
Wynik:
Cena zakupów wynosi 299.96 zł.
Pamiętasz sposób na sprawdzenie długości listy z lekcji o listach? To funkcja len(), gdzie jako parametr przekazujemy listę. Możemy użyć tej funkcji, a potem policzyć średnią cenę towaru z zakupów.
Oto przykład funkcji z len():
print(“Średnia cena towaru to:”, my_sum / len(my_list), “zł.”)
Wynik:
Średnia cena towaru to 74.99 zł.
Zadania
Zadanie 1
Napisz funkcję is_adult(), która w parametrze przyjmie liczbę (dla uproszczenia możesz założyć, że użytkownik zawsze poda poprawną liczbę). Funkcja ma sprawdzić, czy wiek użytkownika jest mniejszy niż 18 – wtedy powinna zwrócić False, w przeciwnym przypadku – True.
Przejdź do pierwszego zadania:
Zadanie 2
Napisz funkcję is_beatle(), która w parametrze przyjmie napis (dla uproszczenia możesz założyć, że użytkownik zawsze poda poprawny napis). Funkcja ma sprawdzić, czy podany napis to “John Lennon”, “Paul McCartney”, “Ringo Starr” lub “George Harrison”. Jeśli tak – ma zwrócić True, w przeciwnym przypadku – False.
Przejdź do drugiego zadania: