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]

Kodförslag

Uppgift m04u10 - unika idrotter

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

# Skapa en tom lista för att spara ALLA inmatningar i ordning
alla_inmatningar = []

# Skapa ett tomt set för att spara unika sporter
unika_sporter = set()

print("Mata in sporter (tryck Enter för att avsluta):")

while True:
    sport = input("> ").strip()
    # Avbryt om användaren trycker Enter utan att skriva något
    if sport == "":
        break

    # Lägg till sport i listan med alla inmatningar
    alla_inmatningar.append(sport)

    # Kolla om sporten redan finns i set:et
    if sport in unika_sporter:
        print('"Den sporten finns redan med!"')
    else:
        # Om den inte fanns, lägg till den i set:et
        unika_sporter.add(sport)

# När inmatningen är klar:
print("\nUnika sporter i bokstavsordning:")
for s in sorted(unika_sporter):
    print(s)

print("\nTotalt antal inmatningar:", len(alla_inmatningar))
print("Antal unika sporter:", len(unika_sporter))

Uppgift m04u11

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

telefonbok = {}

print("Mata in namn (tryck Enter för att avsluta):")

while True:
    namn = input("> ").strip()
    if namn == "":
        # Avsluta om användaren trycker bara Enter
        break
    
    # Fråga efter telefonnummer
    print(f"Ange telefonnummer för {namn}:")
    nummer = input("> ").strip()
    
    # Lägg till i dictionaryn
    telefonbok[namn] = nummer

# Skriv ut telefonbok i bokstavsordning
print("\nTelefonbok (i bokstavsordning):")
for nyckel in sorted(telefonbok.keys()):
    print(f"{nyckel}: {telefonbok[nyckel]}")

# Låt användaren söka efter ett namn
print("\nSkriv in ett namn för att få fram telefonnummer:")
sök_namn = input("> ").strip()

if sök_namn in telefonbok:
    print(f"Telefonnummer: {telefonbok[sök_namn]}")
else:
    print(f"{sök_namn} saknas i telefonboken.")

Uppgift m04u12

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

Kodförslag

Här saknas viss säkerhet, vad händer om man anger ett betyg som inte existerar? Hur hanterar man detta på lämpligt sätt?

Skall vi vara petiga så beräknas medelvärdet lite annorlunda då kursens antal poäng behöver vägas in i beräkningen. Ett A i Fysik 1 är mer värt än samma betyg i Hi1a1 eftersom kurserna har olika antal poäng. Ändra om du vill.

Uppgift m04u13

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

resultat = [4, 3, 5, 2, 4, 3, 4, 5, 3, 2, 4, 5, 3, 4, 2, 4, 5, 3, 4, 2, 4, 5, 3, 4, 2]

# Steg 1: Skriv ut alla betyg
print("Alla betyg:")
for betyg in resultat:
    print(betyg, end=' ')
print()

# Steg 2: Räkna förekomster av varje betyg
frekvens = {}
for betyg in resultat:
    if betyg in frekvens:
        frekvens[betyg] += 1
    else:
        frekvens[betyg] = 1

# Steg 3: Sortera och skriv ut betygen efter antal elever
sorterad_frekvens = sorted(frekvens.items(), key=lambda x: x[1], reverse=True)
print("\nBetyg sorterade efter antal elever:")
for betyg, antal in sorterad_frekvens:
    print(f"Betyg {betyg}: {antal} elever")

# Steg 4: Beräkna och skriv ut medelvärde och median
# Medelvärde
medelvärde = sum(resultat) / len(resultat)
print(f"\nMedelvärde: {medelvärde:.2f}")

# Median
resultat_sorterad = resultat.copy()     # copy() kopierar listan
resultat_sorterad.sort()
antal_betyg = len(resultat_sorterad)
mitten = antal_betyg // 2

if antal_betyg % 2 == 0:
    median = (resultat_sorterad[mitten - 1] + resultat_sorterad[mitten]) / 2
else:
    median = resultat_sorterad[mitten]

print(f"Median: {median}")

Uppgift m04u14

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

provresultat = [
    [7, 8, 6], [5, 6, 5], [9, 8, 7], [6, 5, 6], [8, 9, 8],
    [6, 7, 5], [7, 8, 7], [5, 6, 4], [8, 7, 8], [6, 5, 6],
    [7, 8, 7], [5, 6, 5], [8, 9, 8], [6, 7, 6], [7, 8, 7],
    [5, 6, 5], [8, 9, 8], [6, 7, 6], [7, 8, 7], [5, 6, 5],
    [8, 9, 8], [6, 7, 6], [7, 8, 7], [5, 6, 5], [8, 9, 8]]

# Steg 1: Skriv ut alla elevernas resultat
print("Elevernas resultat:")
for i in range(len(provresultat)):
    resultat = provresultat[i]
    total = sum(resultat)
    print(f"Elev {i+1}: Algebra {resultat[0]}, Geometri {resultat[1]}, Statistik {resultat[2]}, Total {total}")

# Steg 2: Beräkna genomsnittspoäng för varje del
algebra_summa = 0
geometri_summa = 0
statistik_summa = 0
antal_elever = len(provresultat)

for resultat in provresultat:
    algebra_summa += resultat[0]
    geometri_summa += resultat[1]
    statistik_summa += resultat[2]

genomsnitt_algebra = algebra_summa / antal_elever
genomsnitt_geometri = geometri_summa / antal_elever
genomsnitt_statistik = statistik_summa / antal_elever

print(f"\nGenomsnittspoäng:")
print(f"Algebra: {genomsnitt_algebra:.2f}")
print(f"Geometri: {genomsnitt_geometri:.2f}")
print(f"Statistik: {genomsnitt_statistik:.2f}")

# Steg 3: Bestäm högsta och lägsta poäng per del
algebra_poäng = []
geometri_poäng = []
statistik_poäng = []

for resultat in provresultat:
    algebra_poäng.append(resultat[0])
    geometri_poäng.append(resultat[1])
    statistik_poäng.append(resultat[2])

max_algebra = max(algebra_poäng)
min_algebra = min(algebra_poäng)
max_geometri = max(geometri_poäng)
min_geometri = min(geometri_poäng)
max_statistik = max(statistik_poäng)
min_statistik = min(statistik_poäng)

print(f"\nHögsta och lägsta poäng per del:")
print(f"Algebra: Högsta {max_algebra}, Lägsta {min_algebra}")
print(f"Geometri: Högsta {max_geometri}, Lägsta {min_geometri}")
print(f"Statistik: Högsta {max_statistik}, Lägsta {min_statistik}")

# Steg 4: Sortera eleverna efter totalpoäng
provresultat_med_total = []

for i in range(len(provresultat)):
    resultat = provresultat[i]
    total = sum(resultat)
    elev_data = (i + 1, total, resultat)  # (Elevnummer, Totalpoäng, Resultat)
    provresultat_med_total.append(elev_data)

sorterad_lista = sorted(provresultat_med_total, key=lambda x: x[1], reverse=True)

print("\nElever sorterade efter totalpoäng:")
for elev in sorterad_lista:
    elev_nr = elev[0]
    total = elev[1]
    resultat = elev[2]
    print(f"Elev {elev_nr}: Total {total}, Algebra {resultat[0]}, Geometri {resultat[1]}, Statistik {resultat[2]}")