- Kursmaterial
- Planering
- Arbete
- Kunskapsdokument
- Andra kurser
- Om Kursolle
M06 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.
m06u01
kuber = [x**3 for x in range(1, 21)] print(kuber)
m06u02
temperaturer = [18, 27, 22, 30, 15, 29] över_25 = [temp for temp in temperaturer if temp > 25] print(över_25)
m06u03
def högsta_lägsta(temp_lista):
högsta = max(temp_lista)
lägsta = min(temp_lista)
return (högsta, lägsta)
temperaturer = [18, 27, 22, 30, 15, 29]
högst, lägst = högsta_lägsta(temperaturer)
print(f"Högsta temperaturen är {högst}°C och lägsta är {lägst}°C.")
m06u04
meter = [1.5, 3.2, 7.8] centimeter = list(map(lambda m: m * 100, meter)) print(centimeter)
m06u05
konstanter = ['3.14', '9.81', '6.626', '1.602'] flyttal = list(map(float, konstanter)) print(flyttal)
m06u06
kommuner = [
('Göteborg', 600000),
('Borås', 115000),
('Alingsås', 42000),
('Lerum', 45000),
('Partille', 40000),
('Mölndal', 70000),
('Kungsbacka', 87000)
]
sorterade_kommuner = sorted(kommuner, key=lambda kommun: kommun[1])
print(sorterade_kommuner)
m06u07
kommuner = [
('Göteborg', 600000),
('Borås', 115000),
('Alingsås', 42000),
('Lerum', 45000),
('Partille', 40000),
('Mölndal', 70000),
('Kungsbacka', 87000)
]
mindre_50000 = [kommun for kommun in kommuner if kommun[1] < 50000]
print(mindre_50000)
m06u08
kommuner = [
('Göteborg', 600000),
('Borås', 115000),
('Alingsås', 42000),
('Lerum', 45000),
('Partille', 40000),
('Mölndal', 70000),
('Kungsbacka', 87000)
]
mindre_50000 = [kommun for kommun in kommuner if kommun[1] < 50000]
sorterade_mindre = sorted(mindre_50000, key=lambda kommun: kommun[1], reverse=True)
print(sorterade_mindre)
m06u09
elev = {
"namn": "Alva",
"ålder": 17,
"program": "NA",
"intressen": ["kemi", "musik", "klättring"]
}
for nyckel, värde in elev.items():
print(f"{nyckel}: {värde}")
m06u10
import json
bok = {
"titel": "Samtal med vänner",
"författare": "Sally Rooney",
"sidor": 304
}
# Spara till JSON-fil
with open("bok.json", "w", encoding='utf-8') as fil:
json.dump(bok, fil, indent=2, ensure_ascii=False)
# Läsa in från fil
with open("bok.json", encoding='utf-8') as fil:
data = json.load(fil)
print(f"{data['titel']} har {data['sidor']} sidor.")
m06u11 - med shorthanded if
kurser = [
{"namn": "Matematik 2c", "lärare": "Anna Berg", "lärobok": True},
{"namn": "Fysik 1", "lärare": "Lars Nilsson", "lärobok": False},
{"namn": "Programmering 1", "lärare": "Sara Eriksson", "lärobok": True}
]
for kurs in kurser:
bok_text = "har lärobok" if kurs["lärobok"] else "har ingen lärobok"
print(f"{kurs['namn']} undervisas av {kurs['lärare']} och {bok_text}.")
m06u11 - med vanlig if-sats
for kurs in kurser:
if kurs["lärobok"]:
bok_text = "har lärobok"
else:
bok_text = "har ingen lärobok"
print(f"{kurs['namn']} undervisas av {kurs['lärare']} och {bok_text}.")
m06u12
klasser = [
{
"klass": "NA22",
"elever": [
{"namn": "Alva", "ålder": 17, "betyg": [10, 15, 15]},
{"namn": "Joel", "ålder": 18, "betyg": [12.5, 15, 12.5]}
]
},
{
"klass": "TE22",
"elever": [
{"namn": "Sara", "ålder": 17, "betyg": [20, 20, 17.5]},
{"namn": "Omar", "ålder": 18, "betyg": [10, 10, 15]}
]
}
]
for klass in klasser:
for elev in klass["elever"]:
medel = sum(elev["betyg"]) / len(elev["betyg"])
print(f"{elev['namn']} ({klass['klass']}) har ett snitt på {medel:.1f}")
Projektuppgift, del 1
import json
# Ursprunglig datalista
mätningar = [
{"plats": "Göteborg", "temp": 17.4, "nederbörd": 3.2, "datum": "2024-09-01"},
{"plats": "Borås", "temp": 16.1, "nederbörd": 6.8, "datum": "2024-09-01"},
{"plats": "Alingsås", "temp": 15.9, "nederbörd": 4.5, "datum": "2024-09-01"}
]
# Spara till JSON-fil
with open("klimatdata.json", "w", encoding="utf-8") as fil:
json.dump(mätningar, fil, indent=2, ensure_ascii=False)
# Läsa in från fil
with open("klimatdata.json", encoding="utf-8") as fil:
data = json.load(fil)
# Sortera data
sorterade = sorted(data, key=lambda m: m["nederbörd"], reverse=True)
print("Städer sorterade efter nederbörd:")
for mätning in sorterade:
print(f"{mätning['plats']}: {mätning['nederbörd']} mm")
m06u13
elever = [
{"namn": "Anna", "poäng": [5, 7, 6]},
{"namn": "Nils", "poäng": [8, 6]},
{"namn": "Lea", "poäng": [9]}
]
alla_poäng = []
for elev in elever:
alla_poäng += elev["poäng"]
print("Totalt antal poäng:", len(alla_poäng))
print("Högsta poäng:", max(alla_poäng))
print("Lägsta poäng:", min(alla_poäng))
print("Medelpoäng:", round(sum(alla_poäng)/len(alla_poäng), 2))
m06u14
def filtrera_58(poänglista):
return [p for p in poänglista if 4 < p < 9]
# Uttrycket kan också skrivas (p > 4 and p < 9)
elever = [
{"namn": "Ida", "poäng": [3, 7, 8]},
{"namn": "Leo", "poäng": [5, 4]},
{"namn": "Zara", "poäng": [9, 6]}
]
for elev in elever:
höga = filtrera_58(elev["poäng"])
print(elev["namn"], ":", höga)
m06u15
personer = [
{"namn": "A", "favorit": "Hund"},
{"namn": "B", "favorit": "Katt"},
{"namn": "C", "favorit": "Katt"},
{"namn": "D", "favorit": "Fågel"}
]
# Med if/else
antal1 = {}
for person in personer:
djur = person["favorit"]
if djur in antal1:
antal1[djur] += 1
else:
antal1[djur] = 1
# Med get()
antal2 = {}
for person in personer:
djur = person["favorit"]
antal2[djur] = antal2.get(djur, 0) + 1
print("Med if/else:", antal1)
print("Med get():", antal2)
Projektuppgift, del 2
import json
# Läs in data
with open("klimatdata.json", encoding="utf-8") as fil:
data = json.load(fil)
# Förbered dictionaries för temp och nederbörd
temp_summa = {}
temp_antal = {}
neder_summa = {}
neder_antal = {}
for rad in data:
plats = rad["plats"]
temp = rad["temp"]
neder = rad["nederbörd"]
temp_summa[plats] = temp_summa.get(plats, 0) + temp
temp_antal[plats] = temp_antal.get(plats, 0) + 1
neder_summa[plats] = neder_summa.get(plats, 0) + neder
neder_antal[plats] = neder_antal.get(plats, 0) + 1
# Beräkna medelvärden
medel_temp = {plats: round(temp_summa[plats]/temp_antal[plats], 1) for plats in temp_summa}
medel_nederbörd = {plats: round(neder_summa[plats]/neder_antal[plats], 1) for plats in neder_summa}
print("Medeltemperatur per plats:")
print(medel_temp)
print("Medelnederbörd per plats:")
print(medel_nederbörd)
m06u17
import matplotlib.pyplot as plt
kommuner = ["Göteborg", "Borås", "Alingsås", "Lerum", "Kungsbacka"]
befolkning = [587000, 113000, 43000, 43000, 85000]
plt.bar(kommuner, befolkning, color=["blue", "green", "orange", "purple", "red"])
plt.xticks(rotation=30)
plt.title("Befolkning per kommun")
plt.xlabel("Kommun")
plt.ylabel("Antal invånare")
for i in range(len(kommuner)):
plt.text(kommuner[i], befolkning[i] + 10000, str(befolkning[i]), ha="center")
plt.tight_layout()
plt.show()
m06u18
import matplotlib.pyplot as plt
år = ["2019", "2020", "2021", "2022", "2023"]
deltagare = [8, 12, 10, 15, 18]
plt.plot(år, deltagare, marker="o", color="blue")
plt.title("Teknikklubben – Antal deltagare")
plt.xlabel("År")
plt.ylabel("Deltagare")
plt.grid(True)
for i in range(len(år)):
plt.text(år[i], deltagare[i] + 0.5, str(deltagare[i]), ha="center")
plt.tight_layout()
plt.show()
Projektuppgift del 3
import matplotlib.pyplot as plt
platser = ["Göteborg", "Borås", "Alingsås", "Lerum", "Kungsbacka"]
medel_temp = [16.7, 19.3, 18.6, 16.5, 15.5]
medel_nederbörd = [3.0, 3.4, 4.1, 5.6, 4.0]
fig, ax1 = plt.subplots()
ax1.bar(platser, medel_nederbörd, color="skyblue", label="Nederbörd (mm)")
ax1.set_ylabel("Nederbörd (mm)", color="skyblue")
ax1.tick_params(axis="y", labelcolor="skyblue")
ax2 = ax1.twinx()
ax2.plot(platser, medel_temp, color="red", marker="o", label="Temperatur (°C)")
ax2.set_ylabel("Temperatur (°C)", color="red")
ax2.tick_params(axis="y", labelcolor="red")
plt.title("Klimatdata – medelvärden per plats")
fig.tight_layout()
plt.show()
m06u19
import csv
from pprint import pprint
# Läs in filen
with open("resultat.csv", encoding="utf-8") as fil:
reader = csv.DictReader(fil)
data = list(reader)
# Konvertera poäng till int
for elev in data:
elev["poäng"] = int(elev["poäng"])
# Bearbeta data
sammanfattning = {}
for elev in data:
klass = elev["klass"]
poäng = elev["poäng"]
if klass not in sammanfattning:
sammanfattning[klass] = {"poäng": [], "högst": poäng, "lägst": poäng}
sammanfattning[klass]["poäng"].append(poäng)
sammanfattning[klass]["högst"] = max(sammanfattning[klass]["högst"], poäng)
sammanfattning[klass]["lägst"] = min(sammanfattning[klass]["lägst"], poäng)
# Räkna ut medelvärden och skriv ut
for klass, info in sammanfattning.items():
medel = sum(info["poäng"]) / len(info["poäng"])
print(f"{klass}: Medel={medel:.1f}, Högst={info['högst']}, Lägst={info['lägst']}")
m06u20
import csv
# Läs in resultat.csv
with open("resultat.csv", encoding="utf-8") as fil:
reader = csv.DictReader(fil)
data = list(reader)
# Konvertera poäng till int
for rad in data:
rad["poäng"] = int(rad["poäng"])
# Skapa en sammanställning per klass
sammanfattning = {}
for rad in data:
klass = rad["klass"]
poäng = rad["poäng"]
if klass not in sammanfattning:
sammanfattning[klass] = {"poäng": [], "högst": poäng, "lägst": poäng}
sammanfattning[klass]["poäng"].append(poäng)
sammanfattning[klass]["högst"] = max(sammanfattning[klass]["högst"], poäng)
sammanfattning[klass]["lägst"] = min(sammanfattning[klass]["lägst"], poäng)
# Förbered data för export
sammanfattning_lista = []
for klass, info in sammanfattning.items():
medel = sum(info["poäng"]) / len(info["poäng"])
sammanfattning_lista.append({
"klass": klass,
"medel": round(medel, 1),
"högst": info["högst"],
"lägst": info["lägst"]
})
# Skriv till sammanfattning.csv
with open("sammanfattning.csv", mode="w", newline="", encoding="utf-8") as fil:
writer = csv.DictWriter(fil, fieldnames=["klass", "medel", "högst", "lägst"])
writer.writeheader()
writer.writerows(sammanfattning_lista)
Projektuppgift del 4
import csv
import matplotlib.pyplot as plt
# Läs in klimatdata från CSV
with open("klimatdata_jan_mars.csv", encoding="utf-8") as fil:
reader = csv.DictReader(fil)
data = list(reader)
# Konvertera värden till float
for rad in data:
rad["temp"] = float(rad["temp"])
rad["nederbörd"] = float(rad["nederbörd"])
# Bearbeta data per ort
orter_data = {}
for rad in data:
ort = rad["plats"]
if ort not in orter_data:
orter_data[ort] = {
"temp": [], "nederbörd": [],
"max": rad["temp"], "min": rad["temp"]
}
orter_data[ort]["temp"].append(rad["temp"])
orter_data[ort]["nederbörd"].append(rad["nederbörd"])
orter_data[ort]["max"] = max(orter_data[ort]["max"], rad["temp"])
orter_data[ort]["min"] = min(orter_data[ort]["min"], rad["temp"])
# Sammanfatta resultat
orter = []
medeltemp = []
medelnederbörd = []
sammanfattning = []
for ort, info in orter_data.items():
medelt = sum(info["temp"]) / len(info["temp"])
medeln = sum(info["nederbörd"]) / len(info["nederbörd"])
orter.append(ort)
medeltemp.append(medelt)
medelnederbörd.append(medeln)
sammanfattning.append({
"plats": ort,
"medeltemp": round(medelt, 1),
"medelnederbörd": round(medeln, 1),
"högst": round(info["max"], 1),
"lägst": round(info["min"], 1)
})
# Stapeldiagram – medeltemperatur per ort
plt.figure(figsize=(10, 6))
plt.bar(orter, medeltemp)
plt.title("Medeltemperatur per ort")
plt.ylabel("Grader Celsius")
plt.xticks(rotation=30)
plt.grid(axis="y", linestyle="--", alpha=0.5)
plt.tight_layout()
plt.show()
# Stapeldiagram – medelnederbörd per ort
plt.figure(figsize=(10, 6))
plt.bar(orter, medelnederbörd, color="skyblue")
plt.title("Medelnederbörd per ort")
plt.ylabel("Millimeter")
plt.xticks(rotation=30)
plt.grid(axis="y", linestyle="--", alpha=0.5)
plt.tight_layout()
plt.show()
# Kombinerat diagram – två y-axlar
fig, ax1 = plt.subplots(figsize=(10, 6))
ax2 = ax1.twinx()
ax1.bar(orter, medelnederbörd, color="lightblue", label="Nederbörd")
ax2.plot(orter, medeltemp, color="red", marker="o", label="Temperatur")
ax1.set_ylabel("Nederbörd (mm)")
ax2.set_ylabel("Temperatur (°C)")
plt.title("Nederbörd och Temperatur per Ort")
plt.xticks(rotation=30)
ax1.grid(axis="y", linestyle="--", alpha=0.5)
plt.tight_layout()
plt.show()
# Spara sammanfattning till CSV
with open("sammanfattning_klimat.csv", mode="w", newline="", encoding="utf-8") as fil:
writer = csv.DictWriter(fil, fieldnames=["plats", "medeltemp", "medelnederbörd", "högst", "lägst"])
writer.writeheader()
writer.writerows(sammanfattning)