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!"""
    if n == 0:
        return 1    
    produkt = 1
    for m in range(1, n + 1):
        produkt *= m
    return produkt

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

Hvis n er 0, returneres 1. Hvis n er 1 eller større, returneres produktene av heltallene fra og med 1 til og med n.

Funksjonen kan skrives mer kompakt, som

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

Hvis n er 0 eller 1, går koden ikke inn i løkka, og funksjonen returnerer 1. Hvis n er 2 eller større, gjennomløpes løkka, med samme resultat som den første varianten av funksjonen. Den første varianten er imidlertid lettere å tolke, og gjenspeiler definisjonen av fakultet bedre, så vi kommer til å bruke den videre.

Hvis vi lagrer funksjonen i eksempel 1 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