Alle fag › Programmering med Python
Programmering med Python (Python): gratis øving, teori og oppgaver
Et program er en oppskrift som datamaskinen følger linje for linje. I Python lagrer du verdier i variabler, regner med dem og skriver ut resultatet. Som ingeniør bruker du dette til å automatisere beregninger, lese måledata og teste ideer raskt, i stedet for å taste det samme inn på kalkulatoren hundre ganger.
Innhold
1. Grunnleggende Python
Hva handler det om?
Et program er en oppskrift som datamaskinen følger linje for linje. I Python lagrer du verdier i variabler, regner med dem og skriver ut resultatet. Som ingeniør bruker du dette til å automatisere beregninger, lese måledata og teste ideer raskt, i stedet for å taste det samme inn på kalkulatoren hundre ganger.
Alt i Python har en type. Typen bestemmer hva du kan gjøre med verdien: tall kan du regne med, tekst kan du skjære opp og sette sammen.
Begreper og formler
- Variabel: et navn som peker på en verdi.
x = 5betyr «la x peke på 5» (tilordning). Det er ikke en ligning. - Typer:
int(heltall,7),float(desimaltall,7.0),str(tekst,"hei"),bool(TrueellerFalse) oglist([1, 2, 3]). - Regneoperatorer:
+ - * /,//(heltallsdivisjon, runder ned),%(rest) og**(potens). - Presedens:
**regnes før* / // %, som igjen regnes før+ -. Operatorer på samme nivå regnes fra venstre mot høyre. Bruk parenteser når du er i tvil. /gir alltidfloat.//og%runder mot minus uendelig, så-7 // 2er-4.- Indeksering: første tegn har indeks 0, og
s[-1]er det siste. Utsnitt:s[a:b]tar med indeks a til og med b − 1. - Konvertering:
int("42"),float("2.5")ogstr(3).int(6.9)kutter desimalene og gir 6. - Utskrift:
print(f"F = {F:.1f} N")setter verdien inn i teksten med én desimal.
Slik løser du oppgavene
- Les koden linje for linje, og skriv ned verdien til hver variabel etter hver linje.
- Finn typen til hver verdi (int, float eller str) før du regner.
- Regn ut uttrykk i riktig rekkefølge: parenteser, så
**, så* / // %fra venstre, og til slutt+ -. - Sjekk om svaret blir heltall eller desimaltall, og hvordan det skrives ut.
Eksempel
En sensor sender teksten "L=1234mm". Vi vil ha lengden i meter:
s = "L=1234mm"
mm = int(s[2:-2])
m = mm / 1000
print(m, mm // 1000, mm % 1000)
s[2:-2]starter på indeks 2 (etterL=) og stopper før de to siste tegnene. Det gir"1234".int("1234")gjør teksten om til heltallet 1234.mm / 1000gir float-verdien 1,234.mm // 1000er 1 (hele meter), ogmm % 1000er 234 (resten i millimeter).
Utskriften blir 1.234 1 234. Legg merke til at Python alltid bruker punktum som desimaltegn.
Vanlige feil
- Å tro at
input()gir et tall. Den gir alltid en streng, så du må skrivefloat(input()). - Å glemme at indekser starter på 0, og at sluttindeksen i et utsnitt ikke er med.
- Å bruke
=(tilordning) når du mener==(sammenligning). - Å sammenligne desimaltall med
==.0.1 + 0.2 == 0.3erFalsefordi desimaltall lagres binært med avrunding. - Å legge sammen tekst og tall:
"5" + 3girTypeError. Konverter først.
Begreper i denne delen
2. Løkker og betingelser
Hva handler det om?
Et program blir virkelig nyttig først når det kan ta valg og gjenta arbeid. Betingelser (if) lar programmet velge vei ut fra dataene, for eksempel å slå av en pumpe når trykket blir for høyt. Løkker (for og while) gjentar kode, for eksempel for å gå gjennom tusen måleverdier eller simulere en prosess minutt for minutt.
Begreper og formler
if/elif/else: Python sjekker betingelsene ovenfra og ned og kjører bare den første grenen som er sann.- Sammenligning:
==,!=,<,<=,>og>=. Logikk:and,orognot. Kjeder som0 < x < 10er lov. - Sannhetsverdier:
0,0.0,"",[]ogNoneregnes som usanne. Alt annet regnes som sant. for x in liste:går gjennom elementene ett for ett.range(start, stopp, steg)gir heltall fra start og opp til, men ikke med, stopp.range(a, b)gir b − a verdier.while betingelse:gjentar så lenge betingelsen er sann. Noe inne i løkka må endre betingelsen, ellers går den evig.breakavslutter hele løkka.continuehopper over resten av runden og går til neste.- Innrykk (fire mellomrom) bestemmer hva som hører til løkka eller
if-setningen. - Vanlige mønstre: akkumulator (
total += x), teller (n += 1) og søk (if ...: break).
Slik løser du oppgavene
- Lag en tabell med én kolonne per variabel og én rad per runde i løkka.
- I en
while-løkke sjekker du betingelsen før hver runde. - Følg innrykket nøye: hva skjer inne i løkka, og hva skjer etterpå?
- Stopp når betingelsen blir usann eller
breakkjøres, og les av verdiene. - Kontroller første og siste runde ekstra nøye. Det er der de fleste feilene skjer.
Eksempel
En tank inneholder 500 L og tappes med 20 % av innholdet hvert minutt. Etter hvor mange minutter er det under 100 L igjen?
V = 500.0
t = 0
while V >= 100:
V = 0.8 * V
t += 1
print(t)
Verditabell (V etter hver runde): t = 1: 400, t = 2: 320, t = 3: 256, t = 4: 204,8, t = 5: 163,84, t = 6: 131,07, t = 7: 104,86 og t = 8: 83,89. Nå er V >= 100 usann, og løkka stopper. Utskriften er 8.
Kontroll med matematikk: gir , altså 8 minutter.
Vanlige feil
- Å tro at
range(1, 5)tar med 5. Den gir 1, 2, 3 og 4. - Å skrive to
ifnår du menteifogelif. Da kan begge grenene kjøre. - Å glemme å oppdatere variabelen i en
while-løkke, slik at løkka aldri stopper. - Feil innrykk: en linje som skulle vært inne i løkka, kjører bare én gang etterpå.
- Å regne én runde for mye eller for lite (off-by-one).
Begreper i denne delen
3. Funksjoner og datastrukturer
Hva handler det om?
Når et program vokser, deler du det opp i funksjoner: små, navngitte biter som tar inn verdier og gir tilbake et resultat. Da kan du teste hver del for seg og bruke den om igjen, for eksempel én funksjon som regner ut spenning og én som leser en fil med måledata. Datastrukturer bestemmer hvordan du lagrer mange verdier: en liste med målinger, en ordbok med materialdata eller en mengde med unike ID-er.
Begreper og formler
def f(a, b=2):definerer en funksjon med parameterne a og b. b har standardverdien 2.- Kall:
f(3),f(3, 5)eller med nøkkelord:f(3, b=5). returnavslutter funksjonen og sender en verdi tilbake. Utenreturnblir resultatetNone.printviser bare noe på skjermen.- Variabler som lages inne i en funksjon, er lokale og forsvinner når funksjonen er ferdig.
- Liste
[3, 1, 2]: ordnet og kan endres (append,pop,insert,sort). - Tuppel
(3, 1, 2): ordnet, men kan ikke endres. - Ordbok
{"E": 210}: nøkkel og verdi. Brukd["E"],d.get(k, standard)ogd.items(). - Mengde
{1, 2, 3}: uordnet og uten duplikater.x in mengdeer raskt. - Listeforståelse:
[2 * x for x in xs if x > 0]lager en ny liste i én linje. - Tilordning kopierer ikke: etter
b = apeker a og b på samme liste. Bruka.copy()for å få en kopi.
Slik løser du oppgavene
- Finn hvilke verdier parameterne får ved kallet (posisjon, nøkkelord eller standardverdi).
- Gå gjennom funksjonskroppen linje for linje med disse verdiene.
- Se etter
return: hva sendes tilbake, og hva blir bare skrevet ut? - Hold styr på om en liste eller ordbok endres, eller om det lages en ny.
Eksempel
def middel(xs, grense=100):
ok = [x for x in xs if x <= grense]
return sum(ok) / len(ok)
data = {"A": [98, 102, 97], "B": [101, 99, 150]}
res = {k: middel(v, grense=120) for k, v in data.items()}
print(res["B"])
- For nøkkelen
"B"erxs = [101, 99, 150]oggrense = 120(nøkkelordet overstyrer standardverdien 100). - Listeforståelsen beholder verdiene som er høyst 120:
[101, 99]. Verdien 150 er en feilmåling og filtreres bort. sum(ok) / len(ok)blir 200 / 2 = 100.
Utskriften er 100.0. Det blir float fordi / er brukt. Tilsvarende blir res["A"] lik 99.
Vanlige feil
- Å bruke
printi stedet forreturn. Da får den som kaller funksjonen, bareNone. - Å tro at
b = alager en kopi av en liste. - Å bruke en liste som standardverdi (
def f(x, lst=[]):). Lista lages bare én gang og deles mellom alle kall. BrukNoneog lag lista inne i funksjonen. - Å slå opp en nøkkel som mangler:
d["x"]girKeyError. Brukd.geteller sjekk medinførst. - Å endre en liste mens du løkker over den.
return. Lister og ordbøker kan endres, og alle navn som peker på samme objekt, ser endringen.Begreper i denne delen
4. Filer, feil og moduler
Hva handler det om?
Ekte programmer leser data fra filer (måledata, loggfiler, CSV fra et regneark), må tåle feil i dataene og bruker ferdige verktøy fra moduler. Denne delen viser de få tingene du trenger for å gjøre det trygt.
Begreper og formler
- Åpne fil med
with. Da lukkes fila automatisk, også hvis det skjer en feil:
with open("data.txt") as f:
for linje in f:
print(linje.strip())
- Modus:
"r"leser (standard),"w"skriver og sletter det som var der,"a"legger til på slutten. - Rydd i tekst:
linje.strip()fjerner mellomrom og linjeskift i endene,linje.split(",")deler opp i en liste. - Tekst til tall:
int("12")ogfloat("3.5"). GirValueErrorhvis teksten ikke er et gyldig tall. - Fang feil med
try/except, så programmet ikke krasjer:
try:
x = float(tekst)
except ValueError:
x = None
- Moduler:
import mathgirmath.sqrt(2).from math import sqrtgirsqrt(2)direkte. - Formatere tall:
f"{x:.2f}"viserxmed to desimaler.
Slik løser du oppgavene
- Gå gjennom koden linje for linje, og skriv ned verdien til hver variabel.
- Husk at alt du leser fra en fil eller fra
input(), er tekst til du gjør det om. - Når en linje kan gi feil: se hvilken
exceptsom fanger den, og hopp dit.
Eksempel
data = "12;7;x;5"
tall = []
for s in data.split(";"):
try:
tall.append(int(s))
except ValueError:
pass
print(sum(tall))
split(";")gir["12", "7", "x", "5"].int("x")girValueError, som fanges, så"x"hoppes over.tallblir[12, 7, 5], og programmet skriver ut24.
Vanlige feil
- Å regne med tekst:
"3" + "4"blir"34", ikke 7. - Å åpne med
"w"når du ville legge til. Da er det gamle innholdet borte. - Å glemme
strip(), så linjeskiftet henger med. - Å fange alle feil med en tom
except:. Da skjuler du også feil du burde sett.
Begreper i denne delen
Eksempeloppgaver med løsning
Her er noen av oppgavene i programmering med python. I appen får regneoppgavene nye tall hver gang, så du kan øve til det sitter – og ta en prøveeksamen med karakter før eksamen.
Grunnleggende Python: Hva skriver print(7 // 2) ut?
Svar: 3
// er heltallsdivisjon og runder ned.
Løkker og betingelser: Hva skriver koden ut?for i in range(2, 8, 2):
print(i, end=" ")
for i in range(2, 8, 2):
print(i, end=" ")Svar: 2 4 6
range(start, stopp, steg). Stopp-verdien er ikke med.
Funksjoner og datastrukturer: Hva returnerer en funksjon som ikke har noen return-setning?
Svar: None
Python returnerer None implisitt.
Filer, feil og moduler: Du vil legge til nye målinger på slutten av logg.txt uten å slette det som står der. Hvilken modus bruker du i open("logg.txt", ...)?
Svar: "a"
"a" (append) skriver på slutten. "w" tømmer fila først, "r" kan bare lese, og "x" gir feil hvis fila finnes fra før.
Passer for disse emnene
Innholdet dekker pensum som går igjen i ingeniørutdanningene, blant annet:
- MEK1300 (OsloMet)
- TDT4110 (NTNU)
- INF120 (NMBU)