- Kursmaterial
- Planering
- Arbete
- Kunskapsdokument
- Andra kurser
- Om Kursolle
M05 Hjälp till uppgifter
På denna sidan kommer det finnas hjälp till lösning av uppgifter samt en fullt fungerande lösning i form av kod.
Att kopiera färdiga lösningar gör inte att du blir bättre på programmering, men det kan vara ett effektivt sätt att få lite hjälp för att bli en duktig programmerare. Det är ditt ansvar att använda hjälpen på rätt sätt.
Lösningsförslagen är inte alltid kommenterade i koden, tanken är att du skall kunna ta ner koden och själv förstå vad som händer genom att testa och formulera kommentarer
för dig själv.
Flera av lösningarna har jag filmat och förklarar hur jag tänker när jag löser uppgiften. Ibland har jag kompletterat med andra bra filmer som förklarar olika delar på ett bra sätt. Det är inte alltid jag som har gjort filmen och då passar den bättre här än på momentets huvudsida.
Funktioner
Uppgift m05u01
Lösningsförslag
def summera_print(a, b):
summa = a + b
print(f"Summan är: {summa}")
def summera_return(a, b):
return a + b
# Huvudprogram
summera_print(5, 7)
svar = summera_return(5, 7)
print(f"Summan blev {svar}")
# Går även att anropa funktionen direkt vid utskriften
# print(f"Summan blev {summera_return(5,7)}")
Uppgift m05u02
Lösningsförslag
funktioner.py
def summera_print(a, b):
summa = a + b
print("Summan är:", summa)
def summera_return(a, b):
return a + b
m05u02.py
import funktioner
funktioner.summera_print(5, 7)
svar = funktioner.summera_return(5, 7)
print(f"Summan blev {svar}")
Uppgift m05u03
Lösningsförslag
funktioner.py
def summera_print(a, b):
"""
Skriver ut summan av två tal.
Parametrar:
a (int eller float): Första talet
b (int eller float): Andra talet
Returnerar:
None
"""
# Beräknar summan och skriver ut den
summa = a + b
print("Summan är:", summa)
def summera_return(a, b):
"""
Returnerar summan av två tal.
Parametrar:
a (int eller float): Första talet
b (int eller float): Andra talet
Returnerar:
int eller float: Summan av talen
"""
# Beräknar summan och returnerar den
return a + b
m05u03.py
import funktioner
funktioner.summera_print(5, 7)
svar = funktioner.summera_return(5, 7)
print(f"Summan blev {svar}")
# Test: visa dokumentationen
help(funktioner.summera_return)
Uppgift m05u04
Lösningsförslag
geometri.py
# geometri.py
def area_rektangel(bredd, hojd=None):
"""
Returnerar arean av en rektangel.
Parametrar:
bredd (int eller float): Rektangelns bredd
hojd (int eller float eller None): Rektangelns höjd. Om None behandlas den som en kvadrat.
Returnerar:
int eller float: Arean
"""
# Om höjd saknas räknas formen som en kvadrat
if hojd is None:
hojd = bredd
return bredd * hojd
def omkrets_rektangel(bredd, hojd=None):
"""
Returnerar omkretsen av en rektangel.
Parametrar:
bredd (int eller float): Rektangelns bredd
hojd (int eller float eller None): Rektangelns höjd. Om None behandlas den som en kvadrat.
Returnerar:
int eller float: Omkretsen
"""
# Om höjd saknas räknas formen som en kvadrat
if hojd is None:
hojd = bredd
return 2 * (bredd + hojd)
m05u04.py
import geometri
bredd = float(input("Ange bredd: "))
hojd_text = input("Ange höjd (tryck Enter om det är en kvadrat): ")
if hojd_text == "":
hojd = None
else:
hojd = float(hojd_text)
area = geometri.area_rektangel(bredd, hojd)
omkrets = geometri.omkrets_rektangel(bredd, hojd)
print(f"Area: {area}")
print(f"Omkrets: {omkrets}")
Uppgift m05u05
Lösningsförslag
def median(data):
"""
Beräknar medianvärdet i en lista med tal.
:param data: lista med tal
:return: medianvärdet
"""
data = sorted(data)
n = len(data)
mitten = n // 2
if n % 2 == 1:
return data[mitten]
else:
return (data[mitten - 1] + data[mitten]) / 2
tal_lista = []
with open("tal.txt") as fil:
for rad in fil:
rad = rad.strip()
if rad == "":
continue
tal = int(rad)
tal_lista.append(tal)
print("Lista:", tal_lista)
print("Summa:", sum(tal_lista))
print("Största tal:", max(tal_lista))
print("Minsta tal:", min(tal_lista))
medel = sum(tal_lista) / len(tal_lista)
print("Medelvärde:", medel)
print("Median:", median(tal_lista))
antal_större_än_10 = 0
for tal in tal_lista:
if tal > 10:
antal_större_än_10 += 1
print("Antal tal större än 10:", antal_större_än_10)
sorterad = sorted(tal_lista)
print("Sorterad lista:", sorterad)
Uppgift m05u05
Lösningsförslag
def median(data):
"""
Beräknar medianvärdet.
:param data: lista med tal
:return: medianvärdet
"""
data = sorted(data)
n = len(data)
mitten = n // 2
if n % 2 == 1:
return data[mitten]
else:
return (data[mitten - 1] + data[mitten]) / 2
# Del 1 – samla in tal och spara i tal.txt
with open("tal.txt", "w") as fil:
pass # tömmer/skapar filen
while True:
text = input("Ange tal (eller stop): ")
if text == "stop":
break
with open("tal.txt", "a") as fil:
fil.write(text + "\n")
# Del 2 – läs in talen från filen
tal_lista = []
with open("tal.txt") as fil:
for rad in fil:
rad = rad.strip()
if rad == "":
continue
tal = int(rad)
tal_lista.append(tal)
# Del 3 – beräkningar
antal_tal = len(tal_lista)
summa = sum(tal_lista)
storst = max(tal_lista)
minst = min(tal_lista)
medel = summa / antal_tal
medianvarde = median(tal_lista)
antal_storre_an_10 = 0
for tal in tal_lista:
if tal > 10:
antal_storre_an_10 += 1
sorterad_lista = sorted(tal_lista)
# Del 4 – skriv rapport
with open("rapport.txt", "w") as fil:
fil.write("RAPPORT\n")
fil.write("=======\n\n")
fil.write(f"Tal: {tal_lista}\n")
fil.write(f"Antal tal: {antal_tal}\n")
fil.write(f"Summa: {summa}\n")
fil.write(f"Största tal: {storst}\n")
fil.write(f"Minsta tal: {minst}\n")
fil.write(f"Medelvärde: {medel}\n")
fil.write(f"Medianvärde: {medianvarde}\n")
fil.write(f"Antal tal större än 10: {antal_storre_an_10}\n")
fil.write(f"Sorterad lista: {sorterad_lista}\n")
print("Rapporten genererad!")
Uppgift m05u06
Lösningsförslag
def median(data):
data = sorted(data)
n = len(data)
mitten = n // 2
if n % 2 == 1:
return data[mitten]
else:
return (data[mitten - 1] + data[mitten]) / 2
# Del 1 – skapa/töm filen först
with open("tal.txt", "w") as fil:
pass
# pass betyder "gör ingenting"
# Vi öppnar filen i "w"-läge, vilket skapar eller tömmer filen,
# och sedan gör vi inget mer i detta block
# fil.write() fungerar också
# Del 1 – samla in tal och lägg till i filen
while True:
text = input("Ange tal (eller stop): ")
if text == "stop":
break
with open("tal.txt", "a") as fil:
fil.write(text + "\n")
# Del 2 – läs in talen från filen
tal_lista = []
with open("tal.txt") as fil:
for rad in fil:
rad = rad.strip()
if rad == "":
continue
tal = int(rad)
tal_lista.append(tal)
# Del 3 – beräkningar
antal_tal = len(tal_lista)
summa = sum(tal_lista)
storst = max(tal_lista)
minst = min(tal_lista)
medel = summa / antal_tal
medianvarde = median(tal_lista)
antal_storre_an_10 = 0
for tal in tal_lista:
if tal > 10:
antal_storre_an_10 += 1
sorterad_lista = sorted(tal_lista)
# Del 3 – skriv rapport
with open("rapport.txt", "w") as fil:
fil.write("RAPPORT\n")
fil.write("=======\n\n")
fil.write(f"Tal: {tal_lista}\n")
fil.write(f"Antal tal: {antal_tal}\n")
fil.write(f"Summa: {summa}\n")
fil.write(f"Största tal: {storst}\n")
fil.write(f"Minsta tal: {minst}\n")
fil.write(f"Medelvärde: {medel}\n")
fil.write(f"Medianvärde: {medianvarde}\n")
fil.write(f"Antal tal större än 10: {antal_storre_an_10}\n")
fil.write(f"Sorterad lista: {sorterad_lista}\n")
print("Rapporten genererad!")
Uppgift m05u07
Lösningsförslag
import funktioner # din fil med median()
with open("temperaturer.txt") as fil:
rader = fil.readlines()
with open("rapport.txt", "w") as fil:
for rad in rader:
delar = rad.strip().split(";")
stad = delar[0]
temperaturer = []
for varde in delar[1:]:
temperaturer.append(int(varde))
medel = sum(temperaturer) / len(temperaturer)
median = funktioner.median(temperaturer)
rad_text = f"{stad} - medel: {medel:.2f}, median: {median}"
fil.write(rad_text + "\n")
print("Rapport skapad!")
Uppgift m05u08
Lösningsförslag
import json
def median(data):
data = sorted(data)
n = len(data)
mitten = n // 2
if n % 2 == 1:
return data[mitten]
else:
return (data[mitten - 1] + data[mitten]) / 2
# 1. Läs in JSON-filen
with open("temperaturer_flera.json", encoding="utf-8") as fil:
data = json.load(fil)
# 2. Bearbeta data
resultat = []
for post in data:
stad = post["stad"]
temperaturer = post["temperaturer"]
medel = sum(temperaturer) / len(temperaturer)
medianvarde = median(temperaturer)
resultat.append({
"stad": stad,
"medel": int(medel), # gör samma som i exemplet (heltal)
"median": medianvarde
})
# 3. Skriv till ny JSON-fil
with open("rapport.json", "w", encoding="utf-8") as fil:
json.dump(resultat, fil, indent=4, ensure_ascii=False)