- Kursmaterial
- Planering
- Arbete
- Kunskapsdokument
- Andra kurser
- Om Kursolle
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]

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

Inspelat lösningsförslag [klicka för att visa]
Nästlade iterationer
Uppgift m04u03
Lösningsförslag [klicka för att visa]

Inspelat lösningsförslag [klicka för att visa]
While-loopen
Uppgift m04u04
Lösningsförslag [klicka för att visa]

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

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

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]

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

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]

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]

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]}")