Highscore-lista
Nu lämnar vi Marvin bakom oss och tyglarna blir lite friare.
Förkunskaper
Section titled “Förkunskaper”Du har jobbat igenom allt material i “kmom05”
Introduktion
Section titled “Introduktion”Du ska utveckla ett program som hanterar en highscore-lista för ett spel. Programmet ska hålla reda på spelares poäng och nivå, och ge användaren möjlighet att:
- Visa statistik om highscore-listan
- Visa spelare per nivå
- Lägg till eller uppdatera en spelare
- Ta bort en spelare
Programmet ska funka på liknande sätt som Marvin, en menyloop.
Lösningar som använder konstruktionerna list/dict comprehension eller lambda funktioner godkänns inte i denna kurs.
Varje uppgift ska lösas med grundläggande Python konstruktioner som vi går igenom i kursen.
-
Ditt program ska utgå från filen
main.pyi mappensrc/kmom05/leaderboard. Imain.pyska funktionenmain()ligga och starta ditt program.- Strukturera
main.pypå liknande sätt som Marvin fungerar. - Ditt program ska inte starta om man importerar filen
main.py. Man måste anropamain()för att starta programmet. main.pyska anropa en modul som heterleaderboard.pymed hjälpfunktioner.
- Strukturera
-
Du ska strukturera din kod i passande moduler. Du måste skapa minst en modul utöver
main.py. -
Utgå ifrån följande dataset i din kod.
leaderboardär en dictionary där spelarens namn är nyckeln och värdet är en dictionary med poäng och nivå.leaderboard_data = {"Alice": {"score": 1500, "level": "Pro"},"Bob": {"score": 800, "level": "Nybörjare"},"Charlie": {"score": 2300, "level": "Elit"},"Dana": {"score": 1200, "level": "Amatör"},}leaderboard_datafår inte vara en global variabel i din kod. Lägg den i dinmain()funktion.- Skicka med
leaderboard_datasom argument till de funktioner som behöver den.
-
Programmet ska ha följande menyval. Utförlig förklaring av menyvalen hittar du under Menyvalen.
1. Visa statistik2. Visa spelare per nivå3. Lägg till eller uppdatera spelare4. Ta bort spelareq. Avsluta programmet- Efter varje menyval ska du be användaren om en tom
input()så att utskriften pausas tills användaren vill gå vidare. Precis som i Marvin.
- Efter varje menyval ska du be användaren om en tom
-
Felhantering
- Ogiltiga menyval ska ge ett tydligt felmeddelande.
- Programmet ska inte krascha.
- Du kan anta att alla inputs har rätt datatyp.
-
Bedömning
- Programmet fungerar enligt specifikationen (alla menyval fungerar).
- Koden är korrekt strukturerad med funktioner och moduler.
- Koden ska vara DRY (don’t repeat yourself).
- Felhantering och edge cases hanteras korrekt.
- Onödigt komplicerade lösningar kan ge komplettering.
-
Koden ska validera med Ruff.
Terminal window # Kommandot funkar oavsett var du står i ditt repouv run ruff check -
Testerna som finns ska passera.
-
Ladda upp din kod till ditt repo på GitHub. Gör flera små commits när du jobbar med uppgiften!
Rätta eventuella fel som dyker upp och ladda upp igen. När det ser grönt ut så är du klar.
Menyvalen
Section titled “Menyvalen”-
1 — Visa statistik: Skriv ut följande information om highscore-listan:
- Antal spelare
- Total poäng för alla spelare sammanlagt
- Genomsnittlig poäng (använd heltalsdivision)
- Spelaren med högst poäng
- Spelaren med lägst poäng
- Om listan är tom ska du skriva ut
Inga spelare i highscore-listan.istället. - Exempel med originaldatan:
Antal spelare: 4Total poäng: 5800Genomsnittlig poäng: 1450Högst: Charlie (2300 poäng)Lägst: Bob (800 poäng)
-
2 — Visa spelare per nivå: Be om en nivå som input och lista sedan alla spelare med den nivån samt hur många de är. Formatera utskriften enligt
- <namn> (<poäng> poäng). Spelarna ska sorteras från högst till lägst poäng. Skriv också ut det totala antalet spelare på nivån.- Om ingen spelare finns på den angivna nivån ska du skriva ut
Inga spelare på nivå "<nivå>" hittades.. - Exempel med en ny spelare Erik (950 poäng, Nybörjare) tillagd:
Sorterat:Välj nivå: NybörjareSpelare på nivå "Nybörjare":- Bob (800 poäng)- Erik (950 poäng)Antal: 2Välj nivå: NybörjareSpelare på nivå "Nybörjare":- Erik (950 poäng)- Bob (800 poäng)Antal: 2
- Om ingen spelare finns på den angivna nivån ska du skriva ut
-
3 — Lägg till eller uppdatera spelare: Lägg till en ny spelare eller uppdatera en befintlig. Om en spelare med samma namn redan finns i listan ska du uppdatera deras poäng och nivå.
- Menyvalet ska ta tre
input():- namn
- poäng
- nivå
- När datan har lagts till eller uppdaterats ska du skriva ut
<namn> har lagts till.för en ny spelare ochData uppdaterad för <namn>.om spelaren redan fanns. - Exempel:
Spelarnamn: ErikPoäng: 950Nivå: NybörjareErik har lagts till.
- Menyvalet ska ta tre
-
4 — Ta bort spelare: Ta bort en spelare från listan med hjälp av deras namn.
- Menyvalet ska ta ett
input():- namn
- Om spelaren finns och tas bort ska du skriva ut
<namn> har tagits bort. - Om spelaren inte finns ska du skriva ut
Spelaren <namn> hittades inte.
- Menyvalet ska ta ett
-
q: Avsluta programmet.
-
Ogiltig input: Gör en tydlig utskrift och återgå till menyn.
- Börja med datasetet och menyn, implementera sedan ett menyval i taget.
- Testa programmet efter varje menyval för att säkerställa att det fungerar.
- Iterera över dictionaryn med
.items()för att komma åt både namn och data — du packar upp ett tuple(namn, data)i varje iteration. - I testerna har varje menyval sin siffra som tag. Använd
uv run task test kmom05 --tags 1för att bara köra testerna för ett specifikt menyval.