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)