Lagre funksjoner i moduler

Vi har i flere artikler importert fra moduler, for eksempel fra math. Men vi kan også lagre vår egen kode i moduler, som vi så kan importere i annen kode.

Vi skal som eksempel skrive en funksjon vi kaller fakultet(), som vi skal lagre i en modul vi kaller kombinatorikk. Python har riktignok en funksjon for å beregne fakultet i modulen math, men vi skal lage vår egen for øvelsens skyld.

Fakultetet til et positivt heltall, n, kan defineres som 1 · 2 · 3 · … · n. Det er også definert at fakultetet til 0 er 1.

Fakultetet til n skriver vi som n!, det vil si n med et utropstegn etter.

Vi har altså at

0! = 1
1! = 1
2! = 1 · 2 = 2
3! = 1 · 2 · 3 = 6
og så videre.

En funksjon som beregner n! kan se ut som i eksempel 1.

Eksempel 1:

def fakultet(n):
    """Beregner n!"""
    fakt = 1
    for m in range(2, n + 1):
        fakt *= m
    return fakt

Vi forutsetter at n er et heltall større eller lik 0, og gjør ikke noen verifisering av dette.

Hvis n er 0 eller 1, vil ikke løkka bli gjennomløpt, og fakt beholder verdien 1. Hvis n er 2 eller større, vil løkka bli gjennomløpt, og fakt vil bli multiplisert med m fra og med 2 til og med n.

Hvis vi lagrer funksjonen i ei fil vi kaller kombinatorikk, blir kombinatorikk en modul vi kan importere. Vi kan importere hele modulen ved å skrive:

import kombinatorikk

Da må vi referere til funksjonen som kombinatorikk.fakultet().

Eller vi kan velge å importere bare fakultet:

from kombinatorikk import fakultet

Da referer vi til funksjonen som fakultet().

Oppgave 1:

Skriv funksjonen fakultet(), slik den er vist over, inn i ei tom fil, og lagre fila med navnet kombinatorikk.

Åpne deretter ei ny fil, importer fakultet() fra kombinatorikk, og bruk fakultet() til å beregne fakultetet til 5.

Skriv ut resultatet. Riktig svar er 120.

Obs: Den nye fila skal ikke inneholde koden til fakultet(), bare hente den gjennom import.

Tips: Det kan være lurt å ha begge filene i samme mappe. Å importere på tvers av mapper kan være utfordrende.

Se løsningsforslag

Kilder

    • Matthes A. (2019). Python Crash Course. no starch press