Lær deg Python_Modul_1‐4_Del2 - itnett/FTD02H-N GitHub Wiki
La oss fortsette reisen videre og utforske neste modul! Vi skal nå se nærmere på:
- Funksjoner med flere parametere
- Scopes i Python (hvordan variabler oppfører seg inni og utenfor funksjoner)
- Tupler og ordbøker på et dypere nivå
- Unntakshåndtering (videre med feilhåndtering og sikring av kode)
- Datahåndtering – hvordan vi kan jobbe med data i Python
🐍 Python Essentials 1 – Modul 4 (Del 3): Funksjoner, Scopes, Tupler, Ordbøker, og Avansert Unntakshåndtering 🛠️
1️⃣ Flere parametere i funksjoner 📝
I den forrige delen så vi hvordan vi kan bruke *args
og **kwargs
for å håndtere et ubegrenset antall argumenter. Nå skal vi se på hvordan vi kan kombinere flere typer parametere i en funksjon, og hvordan vi kan sette standardverdier for parametere.
Standardverdier i parametere:
Vi kan gi parametere standardverdier, slik at funksjonen kan kalles uten å gi alle argumentene. Hvis en verdi ikke er spesifisert, vil standardverdien brukes.
Eksempel:
def beskriv_person(navn, alder=18):
print(f"{navn} er {alder} år gammel.")
beskriv_person("Ole") # Bruker standardverdi, skriver: Ole er 18 år gammel.
beskriv_person("Kari", 25) # Skriver: Kari er 25 år gammel.
Tenke-etter: Hva tror du skjer hvis du kaller funksjonen uten å sende noen verdier?
2️⃣ Scopes i Python 🌍
Hva er scope?
Scope er det området i koden hvor en variabel er gyldig og kan brukes. Dette er viktig å forstå for å vite når en variabel "lever" og når den ikke kan brukes lenger.
- Lokalt scope: Variabler som er laget inne i en funksjon. De er bare gyldige inne i funksjonen.
- Globalt scope: Variabler som er laget utenfor funksjoner. Disse kan brukes hvor som helst i programmet.
Lokale variabler:
En variabel som er definert inne i en funksjon, kan bare brukes der.
def si_hei():
melding = "Hei!"
print(melding)
si_hei() # Skriver ut "Hei!"
# print(melding) # Gir feil fordi "melding" bare eksisterer inne i funksjonen.
Globale variabler:
En variabel som er definert utenfor alle funksjoner, kan brukes både utenfor og inni funksjoner.
navn = "Ole"
def si_hei():
print("Hei " + navn)
si_hei() # Skriver ut "Hei Ole"
Endre globale variabler inni funksjoner:
For å endre en global variabel inni en funksjon, må vi bruke nøkkelordet global
.
teller = 0
def øk_teller():
global teller
teller += 1
øk_teller()
print(teller) # Skriver ut 1
Tenke-etter: Hva tror du skjer hvis vi ikke bruker global
i eksempelet over?
3️⃣ Tupler og ordbøker på et dypere nivå 📋
Dypdykk i Tupler:
En tuppel kan inneholde ulike typer data, og vi kan "pakke ut" elementene i tuppelen for å tilordne dem til variabler direkte.
Eksempel:
person = ("Kari", 25, "Oslo")
navn, alder, by = person # Pakk ut tuppelen
print(navn) # Skriver ut: Kari
print(alder) # Skriver ut: 25
print(by) # Skriver ut: Oslo
Dypdykk i Ordbøker:
Ordbøker kan brukes til mange praktiske formål, spesielt når du har behov for å lagre data i nøkkel-verdi-format.
For eksempel kan du bruke ordbøker for å telle hvor mange ganger noe skjer:
tekst = "banan eple eple banan pære"
ord_liste = tekst.split() # Lager en liste med ordene ["banan", "eple", "eple", "banan", "pære"]
ord_teller = {}
for ord in ord_liste:
if ord in ord_teller:
ord_teller[ord] += 1
else:
ord_teller[ord] = 1
print(ord_teller) # Skriver ut: {'banan': 2, 'eple': 2, 'pære': 1}
4️⃣ Avansert unntakshåndtering 🚨
I forrige del så vi på grunnleggende unntakshåndtering med try
og except
, men Python gir oss også muligheten til å lage egne unntak og håndtere dem på spesifikke måter.
Lage egne unntak:
Du kan definere egne feilmeldinger ved å bruke nøkkelordet raise
.
Eksempel:
def sjekk_alder(alder):
if alder < 0:
raise ValueError("Alder kan ikke være negativ!")
else:
print(f"Alderen er {alder}")
try:
sjekk_alder(-5)
except ValueError as e:
print(e) # Skriver ut: Alder kan ikke være negativ!
Else og Finally-blokker:
I tillegg til try
og except
, kan vi bruke else
-blokken for å kjøre kode som kun skal utføres hvis ingen feil oppstår. finally
brukes for kode som alltid skal kjøres uansett om det var en feil eller ikke.
Eksempel:
try:
nummer = int(input("Skriv inn et tall: "))
except ValueError:
print("Dette er ikke et gyldig tall!")
else:
print("Ingen feil, alt gikk bra!")
finally:
print("Dette blir alltid skrevet ut.")
5️⃣ Arbeide med data 📊
Python gir oss flere verktøy for å jobbe med data, som lister, ordbøker, og til og med filer. Nå skal vi se hvordan vi kan lese fra og skrive til filer.
Skrive til en fil:
fil = open('data.txt', 'w') # Åpner filen for skriving (w = write)
fil.write("Hei, dette er data i en fil!\n")
fil.close() # Husk å lukke filen etter skriving
Lese fra en fil:
fil = open('data.txt', 'r') # Åpner filen for lesing (r = read)
innhold = fil.read() # Leser innholdet
print(innhold)
fil.close()
🧪 Test deg selv!
- Lag en funksjon som kan ta ubegrenset antall argumenter og returnere summen av dem.
- Bruk scope til å lage en funksjon som endrer en global variabel inni funksjonen.
- Lag en ordbok som teller antall forekomster av hvert ord i en tekst.
- Skriv data til en fil, og les deretter dataene tilbake.
🎓 Oppsummering:
- Flere parametere i funksjoner gir deg fleksibiliteten til å jobbe med mange verdier.
- Scope definerer hvor variabler kan brukes, og vi kan endre globale variabler med
global
-nøkkelordet. - Tupler lar oss pakke og pakke ut flere verdier på en gang.
- Ordbøker er ideelle for å lagre nøkkel-verdi-par og telle forekomster.
- Unntakshåndtering kan utvides med egne feil og kan sikre at kode alltid kjøres, uansett om det oppstod en feil eller ikke.
- Datahåndtering gir deg muligheten til å jobbe med filer, lagre og lese tilbake informasjon.
Er du klar for neste steg? Nå skal vi se nærmere på mer komplekse datahåndteringer og hvordan du kan bruke funksjoner og moduler for å bygge større og mer avanserte programmer! 🚀
La oss fortsette med neste modul! Nå beveger vi oss mot mer avanserte konsepter, inkludert funksjoner, datahåndtering og moduler. Dette vil gi deg muligheten til å bygge enda større og mer robuste programmer i Python.
🐍 Python Essentials 1 – Modul 4 (Del 4): Funksjoner, Datahåndtering, og Moduler 🛠️
1️⃣ Mer om Funksjoner: Returnere flere verdier og Multi-parameter funksjoner 🔄
Returnere flere verdier fra en funksjon:
Som vi så tidligere, kan en funksjon returnere én verdi, men Python lar deg også returnere flere verdier på en gang! Dette gjøres ved å returnere en tuppel.
Eksempel:
def beregn_tall(a, b):
sum_ = a + b
forskjell = a - b
return sum_, forskjell # Returnerer en tuppel
# Pakk ut resultatene
s, f = beregn_tall(10, 5)
print(f"Summen er {s}, og forskjellen er {f}")
Her returnerer vi både summen og forskjellen av to tall. Tuppelen kan pakkes ut til to variabler, som gjør det enkelt å jobbe med flere returverdier.
Multi-parameter funksjoner:
Vi kan definere funksjoner som tar flere parametere og bruke dem til mer komplekse beregninger.
Eksempel:
def beregn_gjennomsnitt(*tall):
sum_ = sum(tall)
antall = len(tall)
return sum_ / antall if antall > 0 else 0
print(beregn_gjennomsnitt(10, 20, 30)) # Skriver ut: 20
print(beregn_gjennomsnitt(5, 15)) # Skriver ut: 10
Her bruker vi *tall
for å tillate et ubegrenset antall parametere. Funksjonen vil da beregne gjennomsnittet av tallene som sendes inn.
2️⃣ Filhåndtering: Lese og skrive filer i Python 🗂️
Nå skal vi se hvordan Python kan brukes til å lagre data i filer og lese tilbake informasjon fra filer. Dette er essensielt når du jobber med store mengder data som ikke kan lagres i minnet.
Skrive til en fil:
Python gjør det enkelt å skrive data til en fil. Du kan bruke open()
for å åpne en fil i skrive-modus ('w'
), og deretter bruke write()
-funksjonen for å lagre innhold.
Eksempel:
with open('min_fil.txt', 'w') as fil:
fil.write("Hei, dette er data lagret i en fil!\n")
fil.write("Her kan du legge til mer informasjon.\n")
with
-blokken sørger for at filen blir riktig lukket etter skrivingen, noe som er viktig for å unngå feil.
Lese fra en fil:
For å lese fra en fil, kan vi bruke 'r'
-modusen med open()
-funksjonen. Deretter kan vi bruke read()
eller readlines()
for å hente innholdet.
Eksempel:
with open('min_fil.txt', 'r') as fil:
innhold = fil.read()
print(innhold)
Her leser vi hele innholdet i filen og skriver det ut til skjermen.
Legge til data i en fil:
Hvis du vil legge til mer informasjon i en eksisterende fil uten å overskrive den, bruker du 'a'
(append) som modus.
Eksempel:
with open('min_fil.txt', 'a') as fil:
fil.write("Dette er en ny linje som legges til filen.\n")
3️⃣ Moduler og Pakker: Bygge gjenbrukbar kode 📦
Hva er moduler?
En modul i Python er en fil som inneholder Python-kode (funksjoner, klasser eller variabler) som kan brukes i andre programmer. Python har mange innebygde moduler, og du kan også lage dine egne.
Importere innebygde moduler:
Python har mange ferdige moduler du kan bruke for å gjøre forskjellige oppgaver enklere. For eksempel kan du bruke math
-modulen for matematiske operasjoner:
Eksempel:
import math
print(math.sqrt(16)) # Skriver ut kvadratroten av 16: 4.0
Lage din egen modul:
Du kan lage dine egne moduler ved å skrive Python-kode i en fil, og deretter importere den i et annet program. Si for eksempel at vi har en fil min_modul.py
med følgende kode:
# min_modul.py
def si_hei():
print("Hei fra modulen!")
Nå kan du importere og bruke denne modulen i et annet program:
import min_modul
min_modul.si_hei() # Skriver ut: Hei fra modulen!
Hva er pakker?
En pakke er en samling av moduler organisert i mapper. Pakker gjør det enklere å organisere større prosjekter ved å dele dem opp i mindre, logiske moduler.
For å lage en pakke, må du opprette en mappe og plassere en __init__.py
-fil inni den. Denne filen forteller Python at mappen skal behandles som en pakke.
Eksempel:
min_pakke/
__init__.py
modul1.py
modul2.py
Du kan deretter importere moduler fra pakken:
from min_pakke import modul1
modul1.noen_funksjon()
4️⃣ Unntakshåndtering (Feilhåndtering) på et dypere nivå 🛑
I forrige del lærte vi om hvordan vi kan bruke try-except-blokken for å håndtere feil. Nå skal vi se nærmere på hvordan vi kan spesifisere flere typer unntak og hvordan vi kan lage egne unntak.
Spesifisere flere typer unntak:
Du kan håndtere flere spesifikke feiltyper i samme try-except-blokk.
Eksempel:
try:
nummer = int(input("Skriv inn et tall: "))
resultat = 100 / nummer
except ZeroDivisionError:
print("Feil: Du kan ikke dele med null.")
except ValueError:
print("Feil: Dette er ikke et gyldig tall.")
Lage egne unntak:
Hvis du vil lage dine egne spesifikke unntak, kan du bruke raise
-nøkkelordet for å kaste en feil.
Eksempel:
def sjekk_alder(alder):
if alder < 0:
raise ValueError("Alder kan ikke være negativ!")
elif alder > 120:
raise ValueError("Alder kan ikke være realistisk.")
else:
print(f"Alderen er {alder}")
try:
sjekk_alder(-5)
except ValueError as e:
print(e) # Skriver ut: Alder kan ikke være negativ!
Her lager vi våre egne feil når alderen er ugyldig.
5️⃣ Jobbe med data: Lagre og lese tilbake data med JSON 🗄️
Hva er JSON?
JSON (JavaScript Object Notation) er et format som brukes til å lagre og overføre data. Det er lett å lese for både mennesker og maskiner, og er mye brukt til å lagre strukturert data.
Python har en innebygd json
-modul som lar deg jobbe med JSON-data.
Skrive JSON-data til en fil:
import json
data = {
"navn": "Kari",
"alder": 30,
"by": "Oslo"
}
with open('data.json', 'w') as fil:
json.dump(data, fil)
Lese JSON-data fra en fil:
with open('data.json', 'r') as fil:
innhold = json.load(fil)
print(innhold)
🧪 Test deg selv!
- Lag en funksjon som returnerer både summen og gjennomsnittet av en liste med tall.
- Lag en modul som inneholder en funksjon som kan regne ut arealet av en sirkel. Importer modulen og bruk funksjonen i et annet program.
- Lag et program som leser JSON-data fra en fil og skriver dem ut på skjermen.
- Lag et program som håndterer en
ZeroDivisionError
og enValueError
i samme try-except-blokk.
🎓 Oppsummering:
- Vi har sett hvordan vi kan returnere flere verdier fra en funksjon, og hvordan vi kan bruke multi-parameter funksjoner.
- Vi har lært hvordan vi kan **
lese og skrive filer** i Python.
- Vi har utforsket moduler og pakker for å organisere kode og gjøre den gjenbrukbar.
- Vi har sett hvordan vi kan lage egne unntak og håndtere flere typer feil.
- Vi har jobbet med JSON-data, et format som er mye brukt for å lagre og overføre strukturert informasjon.
Er du klar for å bygge enda større og mer avanserte programmer? I neste modul skal vi ta alt vi har lært så langt og kombinere det for å lage mer komplekse applikasjoner! 🚀👨💻👩💻
Flott! Nå som du har fått en solid forståelse av funksjoner, datahåndtering, unntakshåndtering, og moduler, er vi klare for å bygge videre på mer komplekse konsepter og applikasjoner. I denne delen skal vi dekke:
- Avanserte funksjoner – hvordan funksjoner kan bli mer dynamiske og fleksible.
- Mer om Tupler og Ordbøker – dypere innsikt i hvordan disse datastrukturene kan brukes.
- Håndtering av unntak på en effektiv måte – mer om hvordan du kan sikre at programmet ditt håndterer feil på en robust måte.
- Innføring i datahåndtering – jobbe med data, lese, skrive og behandle store mengder informasjon.
🐍 Python Essentials 1 – Modul 4 (Del 5): Avanserte Funksjoner, Tupler, Ordbøker og Datahåndtering 🛠️
1️⃣ Avanserte Funksjoner 🛠️
Funksjoner som argumenter:
En av de kraftigste funksjonene i Python er at funksjoner kan sendes som argumenter til andre funksjoner. Dette gjør det mulig å lage veldig fleksible og dynamiske programmer.
Eksempel:
def legg_til(n):
return n + 1
def bruk_funksjon(funksjon, tall):
return funksjon(tall)
print(bruk_funksjon(legg_til, 5)) # Skriver ut 6
Her sender vi funksjonen legg_til
som et argument til bruk_funksjon
, som så utfører den på tallet 5.
Lambda-funksjoner (anonyme funksjoner):
En lambda-funksjon er en enkel, anonym funksjon som du kan lage "on the fly". Dette er spesielt nyttig når du trenger en funksjon som bare skal brukes én gang.
Eksempel:
legg_til = lambda x: x + 2
print(legg_til(5)) # Skriver ut 7
Lambda-funksjoner kan også brukes som argumenter til andre funksjoner:
tall = [1, 2, 3, 4, 5]
dobbel = list(map(lambda x: x * 2, tall))
print(dobbel) # Skriver ut [2, 4, 6, 8, 10]
Tenk etter: Hvorfor er lambda-funksjoner nyttige når vi bare skal bruke dem én gang?
2️⃣ Mer om Tupler og Ordbøker 📋
Tupler:
Vi har tidligere lært at tupler er uforanderlige, men de er fortsatt ekstremt nyttige for å lagre faste sett med data. En kraftig funksjon med tupler er at du kan bruke dem som nøkler i en ordbok, noe du ikke kan gjøre med lister.
Eksempel:
posisjoner = {
(0, 0): "Startpunkt",
(10, 5): "Sluttpunkt"
}
print(posisjoner[(0, 0)]) # Skriver ut: Startpunkt
Her bruker vi en tuppel som nøkkel i ordboken for å representere en posisjon.
Avanserte ordbøker:
Ordbøker kan brukes til mye mer enn bare å lagre informasjon. Du kan bruke ordbøker til å bygge flere nivåer av informasjon, nesten som tabeller.
Eksempel:
personer = {
"Ole": {"alder": 30, "by": "Oslo"},
"Kari": {"alder": 25, "by": "Bergen"}
}
print(personer["Ole"]["alder"]) # Skriver ut: 30
Her har vi en ordbok med flere nivåer, der vi lagrer informasjon om flere personer.
Bruke ordbokens metoder:
Python tilbyr mange nyttige metoder for å jobbe med ordbøker, for eksempel items()
, keys()
, og values()
.
Eksempel:
for navn, info in personer.items():
print(f"{navn} er {info['alder']} år gammel og bor i {info['by']}.")
Dette skriver ut:
Ole er 30 år gammel og bor i Oslo.
Kari er 25 år gammel og bor i Bergen.
3️⃣ Håndtering av Unntak på en Effektiv Måte 🚨
Vi har allerede lært hvordan vi håndterer unntak med try-except-blokken, men hva om du vil håndtere spesifikke unntak eller sørge for at ressursene alltid blir lukket?
Flere spesifikke unntak:
Du kan spesifisere flere unntak i en try-except-blokk for å håndtere dem separat.
Eksempel:
try:
fil = open('ikke_eksisterer.txt', 'r')
except FileNotFoundError:
print("Filen finnes ikke.")
except PermissionError:
print("Ingen tilgang til filen.")
Bruke finally-blokken:
For å sikre at en viss kode alltid kjører, uavhengig av om det er en feil eller ikke, kan du bruke en finally-blokk. Dette er nyttig for å lukke filer eller frigjøre ressurser.
Eksempel:
try:
fil = open('data.txt', 'r')
innhold = fil.read()
except FileNotFoundError:
print("Filen ble ikke funnet.")
finally:
print("Denne koden kjører alltid, uansett om det er en feil eller ikke.")
Tenke-etter: Hvorfor er det viktig å alltid lukke filer etter bruk, selv om det oppstår en feil?
4️⃣ Innføring i Datahåndtering 📊
Hva er datahåndtering?
Datahåndtering i programmering handler om å lagre, lese og behandle data på en effektiv måte. Python gir oss flere verktøy for å håndtere store mengder data, inkludert lister, ordbøker, og filhåndtering.
Skrive og lese fra CSV-filer:
CSV-filer (Comma-Separated Values) er en vanlig måte å lagre tabell-data på. Python har et innebygd bibliotek som heter csv
, som gjør det enkelt å jobbe med CSV-filer.
Skrive til en CSV-fil:
import csv
with open('data.csv', 'w', newline='') as fil:
writer = csv.writer(fil)
writer.writerow(['Navn', 'Alder', 'By'])
writer.writerow(['Ole', '30', 'Oslo'])
writer.writerow(['Kari', '25', 'Bergen'])
Lese fra en CSV-fil:
import csv
with open('data.csv', 'r') as fil:
reader = csv.reader(fil)
for rad i reader:
print(rad)
Dette vil lese innholdet i data.csv og skrive det ut på skjermen.
🧪 Test deg selv!
- Lag en funksjon som bruker en annen funksjon som et argument. Hva kan du oppnå med det?
- Lag en ordbok der nøklene er tupler, og verdiene er beskrivelser av posisjoner (f.eks. koordinater).
- Lag et program som håndterer flere spesifikke unntak (som
FileNotFoundError
ogZeroDivisionError
). - Les fra en CSV-fil og skriv informasjonen ut på skjermen.
🎓 Oppsummering:
- Vi har sett hvordan funksjoner kan sendes som argumenter til andre funksjoner, og hvordan lambda-funksjoner kan brukes for enkle oppgaver.
- Tupler er nyttige som uforanderlige datastrukturer og kan brukes som nøkler i ordbøker.
- Ordbøker er fleksible, og du kan lagre data i flere nivåer.
- Vi har utvidet vår forståelse av unntakshåndtering ved å se på flere spesifikke unntak og hvordan vi alltid kan sørge for at koden blir utført med finally.
- Vi har begynt å jobbe med datahåndtering, spesielt med CSV-filer, som er nyttige for å lagre og lese tabellbaserte data.
Er du klar for neste steg? Vi skal fortsette med avansert datahåndtering, se på flere måter å organisere data på, og introdusere deg til enda flere kraftige verktøy i Python! 🚀👨💻👩💻