M04 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.

Iterationer

For-loopen

Uppgift m04u01

Lösningsförslag [klicka för att visa]

Kodförslag

Inspelat lösningsförslag [klicka för att visa]

Uppgift m04u02

Lösningsförslag [klicka för att visa]

Kodförslag

Inspelat lösningsförslag [klicka för att visa]

Nästlade iterationer

Uppgift m04u03

Lösningsförslag [klicka för att visa]

Kodförslag

Inspelat lösningsförslag [klicka för att visa]

While-loopen

Uppgift m04u04

Lösningsförslag [klicka för att visa]

Kodförslag

Inspelat lösningsförslag [klicka för att visa]

Uppgift m04u05

Lösningsförslag [klicka för att visa]

Kodförslag

Inspelat lösningsförslag [klicka för att visa]

Uppgift m04u06

Lösningsförslag [klicka för att visa]

Kodförslag

Inspelat lösningsförslag [klicka för att visa]

Felhantering

Uppgift m04u07

Detta är en svårare uppgiftet som i nuläget inte har något lösningsförslag. Men lite tips från coachen är ju tillåtet.

Hjälp till lösning [klicka för att visa]

Fundera på;

  • vilka delar du vill ha i ett eller flera try/except-block.
  • Vill du ha alla try/except-block i en loop eller är det bättre att använda flera loopar?
  • Att jämföra olika korrekta värden genererar inget fel. Då behöver du använda en annan struktur än just try/except, tex ifall startvärdet är högre än slutvärdet. Eller är det ens ett fel?

Listor

Uppgift m04u08

Lösningsförslag [klicka för att visa]

Kodförslag

Inspelat lösningsförslag [klicka för att visa]

Uppgift m04u09

Lösningsförslag [klicka för att visa]

Kodförslag

Inspelat lösningsförslag [klicka för att visa]

Denna filmade lösning är inte identisk med den lösningen som finns som lösningsförslag ovan.

Uppgift m04u10

Lösningsförslag [klicka för att visa]

# Del A – Bygg en klasslista
klass = []

while True:
    namn = input("Ange ett namn (STOP för att avsluta): ")

    if namn == "STOP":
        break

    klass.append(namn)

print("\n--- Klasslista ---")
print(klass)
print(f"Antal namn: {len(klass)}")

# Del B – Sök i listan
sok = input("\nSkriv ett namn att söka efter: ")

if sok in klass:
    print(f"{sok} hittades i listan.")
else:
    print(f"{sok} finns inte i listan.")
    val = input("Vill du lägga till namnet? (j/n): ")

    if val.lower() == "j":
        klass.append(sok)
        print(f"{sok} lades till i listan.")
    else:
        print("Namnet lades inte till.")
# Del C – Sortera och skriv ut snyggt
klass.sort()

print("\n--- Sorterad och numrerad klasslista ---")
for i, namn in enumerate(klass, start=1):
    print(f"{i}. {namn}")

# Del D – Listor i listor
parlista = []

# Stega 2 i taget: 0, 2, 4, ...
for i in range(0, len(klass), 2):
    namn1 = klass[i]

    if i + 1 < len(klass):
        namn2 = klass[i + 1]
    else:
        namn2 = "-"

    parlista.append([namn1, namn2])

print("\n--- Par av namn ---")
for par in parlista:
    print(par[0], " + ", par[1])

Uppgift m04u11

Lösningsförslag [klicka för att visa]

# Del A – Samla in data
tal_lista = []

while True:
    tal = int(input("Mata in ett tal (0 avslutar): "))
    if tal == 0:
        break
    tal_lista.append(tal)


# Del B – Bearbeta data
if len(tal_lista) == 0:
    print("Du matade inte in några tal.")
else:
    unika_tal = set(tal_lista)

    resultat = (
        sum(tal_lista),
        min(tal_lista),
        max(tal_lista)
    )

# Del C – Presentera resultatet
    print("Alla tal:", tal_lista)
    print("Unika tal:", unika_tal)
    print("Summa:", resultat[0])
    print("Minsta tal:", resultat[1])
    print("Största tal:", resultat[2])

Uppgift m04u12

Lösningsförslag

telefonbok = {}

# Del A + B: inmatning
while True:
    namn = input("Ange namn (stop för att avsluta): ")

    if namn == "stop":
        break

    if namn in telefonbok:
        print("Namnet finns redan.")
        svar = input("Vill du uppdatera numret? (ja/nej): ")

        if svar == "ja":
            nummer = input("Ange nytt nummer: ")
            telefonbok[namn] = nummer
    else:
        nummer = input("Ange telefonnummer: ")
        telefonbok[namn] = nummer

# Del C: utskrift och uppslagning
print("\nTelefonbok:")
print(telefonbok)

sok = input("\nVems nummer vill du slå upp? ")

if sok in telefonbok:
    print(f"{sok}s nummer är {telefonbok[sok]}")
else:
    print("Namnet finns inte i telefonboken.")

Uppgift m04u13

Lösningsförslag [klicka för att visa]

resultat = {}

# 1) Inmatning
while True:
    namn = input("Namn (Enter för att avsluta): ")
    if namn == "":
        break

    poang = int(input("Resultat: "))
    resultat[namn] = poang

# Om inget matats in
if len(resultat) == 0:
    print("\nInga resultat att analysera.")
else:
    # 2) Summa + antal + medel
    summa = 0
    for p in resultat.values():
        summa += p

    antal = len(resultat)
    medel = summa / antal

    print("\nSumma:", summa)
    print(f"Medel: {medel:.2f}")

    # 3) Lista över medel + räkna hur många
    print("\nÖver medel:")
    over = 0
    for namn, p in resultat.items():
        if p > medel:
            print(namn, "-", p)
            over += 1

    print("\nAntal över medel:", over)

Uppgift m04u14

Lösningsförslag [klicka för att visa]

# --- Del A: Klassregister ---
klassregister = {}

while True:
    namn = input("Namn (Enter för att avsluta): ")
    if namn == "":
        break

    klass = input("Klass: ")
    klassregister[namn] = klass

print("\nKlassregister:")
for namn, klass in klassregister.items():
    print(namn, "-", klass)

# --- Del B: Slå upp och ta bort ---
sok_namn = input("\nSök efter elev: ")

if sok_namn in klassregister:
    print(f"{sok_namn} går i {klassregister[sok_namn]}")
else:
    print("Eleven finns inte i registret.")

# Ta bort en elev (exempel: första nyckeln)
if len(klassregister) > 0:
    ta_bort = next(iter(klassregister))
    del klassregister[ta_bort]
    print(f"\nTog bort {ta_bort} ur registret.")

# --- Del C: Räkna förekomster ---
antal_per_klass = {}

for klass in klassregister.values():
    if klass in antal_per_klass:
        antal_per_klass[klass] += 1
    else:
        antal_per_klass[klass] = 1

print("\nAntal elever per klass:")
for klass, antal in antal_per_klass.items():
    print(f"{klass}: {antal}")

Uppgift m04u15

Lösningsförslag [klicka för att visa]

# Del A
pass1 = {"aktivitet": "Löpning", "minuter": 30, "intensitet": 4}
print(f'{pass1["aktivitet"]} - {pass1["minuter"]} min - {pass1["intensitet"]}/5')

# Del B
traning = [
    {"aktivitet": "Löpning", "minuter": 30, "intensitet": 4},
    {"aktivitet": "Gym", "minuter": 45, "intensitet": 5},
    {"aktivitet": "Promenad", "minuter": 40, "intensitet": 2}
]

print("\nAlla pass:")
for p in traning:
    print(f'{p["aktivitet"]} - {p["minuter"]} min - {p["intensitet"]}/5')

# Del C
total_tid = 0
for p in traning:
    total_tid += p["minuter"]

medel_tid = total_tid / len(traning)

print("\nTotal tid:", total_tid, "min")
print("Medeltid per pass:", round(medel_tid, 2), "min")

print("\nHög intensitet (4–5):")
for p in traning:
    if p["intensitet"] >= 4:
        print(f'- {p["aktivitet"]} ({p["minuter"]} min, {p["intensitet"]}/5)')

# Extra (frivillig)
svar = input("\nVill du lägga till ett pass? (j/n): ")
if svar == "j":
    aktivitet = input("Aktivitet: ")
    minuter = int(input("Minuter: "))
    intensitet = int(input("Intensitet (1-5): "))

    nytt_pass = {"aktivitet": aktivitet, "minuter": minuter, "intensitet": intensitet}
    traning.append(nytt_pass)

    print("\nUppdaterad lista:")
    for p in traning:
        print(f'{p["aktivitet"]} - {p["minuter"]} min - {p["intensitet"]}/5')