3 Funktiot

Matematiikassa

Matematiikassa funktion voi ajatella olevan operaatio, joka muokkaa lukuja. Operaation jälkeen saadaan uusi luku.

$f(x) = x^2$

$f(4) = 16$

$g(a, b) = a \cdot b$

$g(4, 10) = 4 \cdot 10 = 40$

Pythonissa

Myös pythonissa funktio voi olla operaatio, joka muokkaa lukuja. Funktio voi olla kuitenkin paljon monimutkaisempi, koska funktion sisällä voi suorittaa mitä tahansa python-koodia.

Pythonissa funktioita voi siis käyttää paljon muuhunkin kuin pelkkään lukujen käsittelyyn. Niillä voi esimerkiksi välttää saman koodin kirjoittamista moneen kertaan.

Funktioita voi luoda itse ja niitä on valmiina. Esimerkiksi print ja len ovat valmiiksi määriteltyjä funktioita.

Funktio voi ottaa parametreja ja palauttaa jonkun arvon. Parametreja voi olla mikä tahansa määrä. Funktio voi palauttaa arvon return-rakenteella, mutta tämäkään ei ole pakollista.

In [20]:
def f(x):
    return x ** 2
In [21]:
# Funktion f(x) parametriksi asetetaan luku 4 ja tallennetaan funktion palauttama arvo muuttujaan tulos
tulos = f(4)
print(tulos)
16
In [22]:
# Funktiolla g on kaksi parametria a ja b
def g(a, b):
    return a * b
In [23]:
tulos = g(4, 10)
print(tulos)
40

Funktioiden suoritusjärjestys

Funktio suoritetaan vasta silloin kun sitä kutsutaan.

In [24]:
# Määritellään funktio, mutta ei vielä kutsuta sitä suoritettavaksi. Funktio2 ei palauta mitään
def funktio2():
    print("printataan funktion sisältä")


# Kutsutaan print-funktiota kaksi kertaa
print(1)
print(2)
# Kutsutaan nyt itse määriteltyä funktiota suoritettavaksi
funktio2()
print(4)
funktio2()
1
2
printataan funktion sisältä
4
printataan funktion sisältä

Funktio suoritetaan vasta kun se kutsutaan.

Tehtäviä

Tehtävä 3.1

Tee funktio, joka ottaa parametrikseen luvun ja palauttaa luvun itseisarvon

$\left|x\right|=\begin{cases} x&{,}\ jos\ x\ge 0\\ -x&{,}\ muuten \end{cases}$

In [25]:
def itseisarvo(x):
    # Koodi tänne
    if x >= 0:
        return x
    else:
        return -x


# Testejä:
print(itseisarvo(3), "pitäisi olla 3")
print(itseisarvo(-3), "pitäisi olla 3")
print(itseisarvo(0), "pitäisi olla 0")

print("Funktion arvo on", itseisarvo(-10))

print(abs(-6))
3 pitäisi olla 3
3 pitäisi olla 3
0 pitäisi olla 0
Funktion arvo on 10
6

Tehtävä 3.2

Kirjoita funktio, joka

a) ottaa parametrikseen kaksi lukua ja laskee niiden keskiarvon

b) ottaa parametrikseen listan ja laskee sen keskiarvon

In [26]:
def itseisarvo(x):
    if x < 0:
        return -x
    else:
        return x


# Testejä:
print(itseisarvo(3), "pitäisi olla 3")
print(itseisarvo(-3), "pitäisi olla 3")
print(itseisarvo(0), "pitäisi olla 0")
3 pitäisi olla 3
3 pitäisi olla 3
0 pitäisi olla 0

Tehtävä 3.3

Kirjoita funktio, joka ottaa parametrikseen listan ja palauttaa listan kaikkien lukujen tulon.

In [27]:
def tulo(lista):
    tulo = 1
    for luku in lista:
        tulo = tulo * luku
    return tulo
print(tulo([3,2,4]))
24

Tehtävä 3.4

Tee funktio, joka ottaa parametriksi listan ja luvun. Palauta uusi lista, josta on poistettu kaikki annettua lukua pienemmät alkiot

In [28]:
def funktio(lista, luku):
    # luodaan uusi tyhjä lista
    uusi_lista = []

    for alkio in lista:
        if alkio >= luku:
            # komenolla .append() lisätäään listaan uusi luku
            uusi_lista.append(alkio)
    return uusi_lista


testilista = [3, 5, 1, -10, 5, -100, 6, 1000, 40, -100]

muokattu_lista = funktio(testilista, 5)

print(muokattu_lista)
print(testilista)
[5, 5, 6, 1000, 40]
[3, 5, 1, -10, 5, -100, 6, 1000, 40, -100]

Tehtävä 3.5

Arvioi numeerinen derivaatta funktioista $f(x) = x^2$, $g(x) = 4x$ ja $s(x) = \sqrt{x}$ haluamassasi kohdissa. Numeerisen derivaatan voi arvioida kaavalla $\dfrac{f(x+h)-f(x)}{h}$, kun $h$ on pieni luku.

In [29]:
import math


def f(x):
    return x ** 2


def g(x):
    return 4 * x


def s(x):
    return math.sqrt(x)


h = 0.000001
x = 1


derivaatta = (g(x + h) - g(x)) / h

print("funktion 4x numeerinen on:", derivaatta)

derivaatta2 = (f(1 + h) - f(1)) / h
print("funktion f(x) derivaatta kohdassa x=1 on", derivaatta2)

derivaatta3 = (s(2 + h) - s(2)) / h
print("funktion s(x) derivaatta kohdassa x=2 on", derivaatta3)
funktion 4x numeerinen on: 3.9999999996709334
funktion f(x) derivaatta kohdassa x=1 on 2.0000009999243673
funktion s(x) derivaatta kohdassa x=2 on 0.35355334637721114
In [ ]: