Slowo kluczowe def, parametry, return, zasieg zmiennych, funkcje w praktyce
ð Podstawa programowa: II.1Funkcja to wydzielony blok kodu, ktory wykonuje okreslone zadanie. Funkcje pozwalaja dzielic program na mniejsze, logiczne czesci, co sprawia, ze kod jest czytelniejszy, latwiejszy do testowania i mozna go wielokrotnie uzywac (zasada DRY - Don't Repeat Yourself).
Funkcje mozemy porownac do przepisow kucharskich - kazdy przepis ma nazwe, liste skladnikow (parametry) i opisane kroki (cialo funkcji), a na koncu dostajemy gotowe danie (wartosc zwracana).
W Pythonie funkcje definiujemy za pomoca slowa kluczowego def, po czym podajemy nazwe funkcji, nawiasy okragle (z opcjonalnymi parametrami) i dwukropek. Cialo funkcji musi byc wciete (zidentowane).
# Funkcja bez parametrow
def przywitaj():
print("Czesc! Witaj w programie!")
# Wywolanie funkcji
przywitaj() # Wypisze: Czesc! Witaj w programie!
przywitaj() # Mozemy wywolac wielokrotnie
Parametry to zmienne, ktore przekazujemy do funkcji podczas jej wywolania. Pozwalaja one funkcji dzialac na roznych danych za kazdym razem.
# Funkcja z jednym parametrem
def przywitaj_osobe(imie):
print(f"Czesc, {imie}! Milo Cie widziec!")
przywitaj_osobe("Anna") # Czesc, Anna! Milo Cie widziec!
przywitaj_osobe("Tomek") # Czesc, Tomek! Milo Cie widziec!
# Funkcja z wieloma parametrami
def dodaj(a, b):
wynik = a + b
print(f"{a} + {b} = {wynik}")
dodaj(3, 5) # 3 + 5 = 8
dodaj(10, 20) # 10 + 20 = 30
Funkcja moze zwracac wartosc za pomoca instrukcji return. Zwrocona wartosc moze byc przypisana do zmiennej lub uzyta w wyrazeniu.
# Funkcja zwracajaca wartosc
def pole_prostokata(a, b):
return a * b
# Uzycie zwroconej wartosci
wynik = pole_prostokata(5, 3)
print(f"Pole: {wynik}") # Pole: 15
# Mozna tez bezposrednio
print(f"Pole: {pole_prostokata(7, 4)}") # Pole: 28
Parametrom mozna nadawac wartosci domyslne. Jezeli podczas wywolania nie podamy argumentu, zostanie uzyta wartosc domyslna.
def potega(podstawa, wykladnik=2):
return podstawa ** wykladnik
print(potega(5)) # 25 (uzyto domyslnego wykladnika 2)
print(potega(5, 3)) # 125 (wykladnik = 3)
print(potega(2, 10)) # 1024
Zmienne utworzone wewnatrz funkcji sa lokalne - istnieja tylko w tej funkcji. Zmienne zdefiniowane poza funkcjami sa globalne - dostepne w calym programie.
x = 10 # zmienna globalna
def moja_funkcja():
y = 5 # zmienna lokalna
print(f"x = {x}, y = {y}")
moja_funkcja() # x = 10, y = 5
print(x) # 10 - OK
# print(y) # BLAD! y nie istnieje poza funkcja
Napisz cztery funkcje: dodaj(a, b), odejmij(a, b), pomnoz(a, b), podziel(a, b). Kazda ma zwracac wynik odpowiedniej operacji. Funkcja podziel powinna obslugiwac dzielenie przez zero.
def dodaj(a, b):
return a + b
def odejmij(a, b):
return a - b
def pomnoz(a, b):
return a * b
def podziel(a, b):
if b == 0:
return "Blad: dzielenie przez zero!"
return a / b
# Testy
print(dodaj(10, 5)) # 15
print(odejmij(10, 5)) # 5
print(pomnoz(10, 5)) # 50
print(podziel(10, 5)) # 2.0
print(podziel(10, 0)) # Blad: dzielenie przez zero!
Napisz dwie funkcje: celsius_na_fahrenheit(c) i fahrenheit_na_celsius(f). Wzory: F = C * 9/5 + 32 oraz C = (F - 32) * 5/9. Przetestuj dla kilku wartosci.
def celsius_na_fahrenheit(c):
return c * 9 / 5 + 32
def fahrenheit_na_celsius(f):
return (f - 32) * 5 / 9
# Testy
print(f"0°C = {celsius_na_fahrenheit(0)}°F") # 32.0
print(f"100°C = {celsius_na_fahrenheit(100)}°F") # 212.0
print(f"32°F = {fahrenheit_na_celsius(32)}°C") # 0.0
print(f"98.6°F = {fahrenheit_na_celsius(98.6):.1f}°C") # 37.0
Napisz funkcje czy_pierwsza(n), ktora zwraca True jesli n jest liczba pierwsza, False w przeciwnym przypadku. Uzyj jej do wypisania wszystkich liczb pierwszych od 1 do 100.
import math
def czy_pierwsza(n):
if n < 2:
return False
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0:
return False
return True
print("Liczby pierwsze od 1 do 100:")
for i in range(1, 101):
if czy_pierwsza(i):
print(i, end=" ")
Napisz funkcje oblicz_bmi(waga, wzrost), ktora oblicza BMI (waga/wzrost^2) oraz funkcje interpretuj_bmi(bmi), ktora zwraca opis slowny (niedowaga, norma, nadwaga, otylosc).
def oblicz_bmi(waga_kg, wzrost_m):
return waga_kg / (wzrost_m ** 2)
def interpretuj_bmi(bmi):
if bmi < 18.5:
return "niedowaga"
elif bmi < 25:
return "waga prawidlowa"
elif bmi < 30:
return "nadwaga"
else:
return "otylosc"
waga = float(input("Podaj wage (kg): "))
wzrost = float(input("Podaj wzrost (m): "))
bmi = oblicz_bmi(waga, wzrost)
print(f"Twoje BMI: {bmi:.1f}")
print(f"Kategoria: {interpretuj_bmi(bmi)}")