Etapy:
- 0 - O programowaniu
- 1 - Wiersz poleceń
- 2 - Interpreter Pythona
- 3 - Zmienne
- 4 - Typy danych
- 5 - Dane użytkownika
- 6 - Edytor
- 7 - Instrukcje warunkowe
- 8 - Petle
- 9 - Funkcje
- 10 - Zadania
- 11 - Co teraz?
Useful Links
Step 9 - Funkcje
Funkcje pozwalają nam na dzielenie jednej wielkiej listy zadań w naszym programie na kilka mniejszych list. To takie jakby pisanie małych programików w większym programie. W Pythonie często używamy pojęcia funkcji i metody zamiennie. (Python jest całkowicie obiektowy, dlatego, każda funkcja jest metodą, nie będziemy się dzisiaj jednak zajmować teorią).
W Pythonie istnieje wiele funkcji wbudowanych - gotowych do użytku, dostarczonych jako część języka. W czasie warsztatów poznaliśmy ich kilka.
Funkcje standardowego wejścia input()
i wyjścia print()
.
Funkcje związane z konwersją (rzutowaniem) typów:
int()
float()
str()
bool()
i inne, którym nie zawsze poświęcamy dość uwagi:
type()
len()
range()
spell = 'Abrakadabra'
len(spell) # uzycie funkcji wbudowanej
print(spell.upper()) # uzycie metody na zmiennej typu string
Funkcje
Możemy też pisać własne funkcje w Pythonie. Dzielenie całego kodu na funkcje sprawia, że zamiast jednego wielkiego programu mamy wiele małych programików. Ale co tak właściwie nam to daje?
- Małe kawałki kodu łatwiej się pisze.
- Małe kawałki kodu są łatwiejsze do przeczytania i zrozumienia.
- Oszczędzamy czas, bo jednej funkcji możemy użyć w kilku miejscach (zasada DRY - don’t repeat yourself)
A więc, pobawmy się funkcjami tworząc kolejny plik.
Czego się przy okazji nauczymy?
- deklarowania funkcji,
- wywoływania funkcji,
- parametrów i argumentów funkcji,
- wartości zwracanych przez funkcje.
Bierzmy się do roboty!
Tworzymy funkcje
Stwórz nowy plik z następującym kodem
def say_hello():
print('Hej!')
print('Jak się masz?')
say_hello()
Spójrz jak zbudowana jest nasza funkcja:
-
Definicja metody: słowo kluczowe
def
, nazwa metodysay_hello
, oraz nawiasy okrągłe()
. -
Ciało funkcji, które zawiera listę zadań do wykonania
Poza funkcją, w głównej części programu mamy wywołanie funkcji say_hello()
.
Dzięki temu, że funkcja jest “nad” główną częścią programu, a więc jest zdefiniowana poza główną częścią programu, możemy ją wywołać wielokrotnie:
def say_hello():
print('Hej!')
print('Jak się masz?')
say_hello()
print('- Dzień dobry, całkiem w porządku')
say_hello()
print('- Cześć! Super!')
say_hello()
print('- No siema, ale weź już skończ')
Przesłanie argumentu do funkcji
Bywa tak, że chcemy by nasza funkcja wykonywała bardziej skonkretyzowane zadania. Chcemy by dostała jakieś dane i je wykorzystała. Dlatego funkcje przyjmują argumenty.
def say_hello(name):
print('Hej', name)
print('Jak się masz?')
say_hello("Anna")
Pewnie już widzisz, że wywoływanie funkcji jest naprawdę proste - po prostu podajesz nazwę funkcji, a za nią wpisujesz nawiasy okrągłe. Jeżeli chcesz przekazać do funkcji jakieś argumenty, wpisz je w tych nawiasach.
Nazwa argumentu to zmienna jakiej będziemy używać tylko w obrębie danej funkcji.
Dlatego nie możesz sprawdzić co zawiera zmienna name
poza ciałem funkcji.
def say_hello(name):
print('Hej', name)
print('Jak się masz?')
say_hello("Anna")
print(name) # !!! błąd
Zobacz jak możemy wielokrotnie wysłać imię do funkcji:
def say_hello(name):
print('Hej', name)
print('Jak się masz?')
name1 = input('Podaj swoje imię: ')
say_hello(name1)
print('- Cześć!')
name2 = input('Podaj swoje imię: ')
say_hello(name2)
print('- Cześć!')
name3 = input('Podaj swoje imię: ')
say_hello(name3)
print('- Cześć!')
Widzisz, powtarzanie czynności? Chyba czas użyć pętlę!
def say_hello(name):
print('Hej', name)
print('Jak się masz?')
for _ in range(3):
user_name = input('Podaj swoje imię: ')
say_hello(user_name) #wywołaliśmy funkcję wewnątrz pętli
print('- Cześć!')
Jeszcze inna, mała, przykładowa funkcja:
def my_mood(answer):
print("Czuję się: ", answer)
user_mood = input("Jak się czujesz?")
my_mood(user_mood)
Return
Zaczniemy od kodu - porównamy kod funkcji, która wyświetla odpowiedź, z kodem funkcji, która zwraca odpowiedź.
Co to oznacza?
def say_hello(name):
print('Witaj ' + name + '!') #wyświetla powitanie
girls = ['Ada', 'Julia', 'Ruby']
for g in girls:
say_hello(g)
print('🎈')
def say_hello(name):
welcome = 'Witaj ' + name + '!'
return welcome # zwraca string z powitaniem
girls = ['Ada', 'Julia', 'Ruby']
for g in girls:
message = say_hello(g) # zapisujemy napis zwrócony przez funkcję
print(message) # wyświetlamy napis
print('🎈')
Zapamiętaj: return
przerywa działanie funkcji i zwraca wartość z powrotem do miejsca, gdzie została wywołana funkcja.
Zadanie 1
Utwórz funkcję, która przyjmuje argument - liczbę punktów ze sprawdzianu na max.50 punktów i oblicza procentowy wynik. Poproś kilku użytkowników o podanie ich wyniku. Wyświetl im ile procent uzyskali ze sprawdzianu
def test_result(points):
return round(points/50, 2) # metoda round zaokrągla wynik
students = int(input("Podaj liczbę studentów: "))
for s in range(students):
student_points = int(input("Podaj wynik punktowy ze egzaminu: "))
result_proc = test_result(student_points)
print(f"Student {s+1}, uzyskał wynik: {result_proc} %")
Zadanie 2
Rozszerz zadanie 1 o wyświetlenie oceny na podstawie skali ocen:
- powyżej 90% - 5 (bdb)
- powyżej 70% - 4 (db)
- powyżej 50% - 3 (dost)
- powyżej 30% - 2 (dop)
- 30% i mniej - 1 (ndst)
def test_result(points):
result = round(points/50, 2)
if result > 0.90:
return "bdb"
elif result > 0.70:
return "db"
elif result > 0.50:
return "dost"
elif result > 0.30:
return "dop"
else:
return "ndst"
students = input(input("Podaj liczbę studentów: "))
for s in range(students):
student_points = int(input("Podaj wynik punktowy ze egzaminu: "))
grade = test_result(student_points)
print(f"Student {s+1} uzyskał ocenę: {grade}")
To już koniec nowych Pythonowych tematów, ale nie koniec naszego warsztatowego materiału. Możesz się sprawdzić, wykonując dodatkowe zadania!