Kmom10: Projekt och examination
Tips innan du börjar med projektet, repetera vad du har gjort i tidigare kursmoment. Fräscha upp minnet, tänk på hur långt du har kommit och hur mycket du har lärt dig.
Läs först igenom hela projektet och lägg upp en plan. Vad ska du göra? Hur kan du göra det? Har du gjort något liknande delproblem tidigare? Därefter börjar du koda.
Detta kursmoment avslutar och examinerar kursen.
Du jobbar enskilt och tar inte hjälp av någon. Det du lämnar in är ditt eget arbete och du har inte låtit en Ai-bot göra ditt jobb.
Förberedelser
Section titled “Förberedelser”Upplägget är enligt följande
Section titled “Upplägget är enligt följande”- Projektet ska utföras individuellt
- Tänk på att namngivning ska ske på engelska. Varje namn som är på annat språk ger poängavdrag.
- Variabler som innehåller konstanter ska vara namngivna som konstanter.
- Du ska implementera koden med konstruktioner du har lärt dig i kursen. Alltså ska du t.ex. inte använda klasser.
- Du får bara använda moduler som vi har gått igenom i kursen,
time-modulen, samtrandom-modulen (enbart i krav 6). - Du får inte använda:
zip()funktionen- list/dict comprehension/generators
- lambda funktioner
- Om du är osäker, fråga kursansvarig!
- Du får bara använda moduler som vi har gått igenom i kursen,
Du kan själv styra din arbetsinsats genom att välja vilka valfria delar du utför.
Förutsättning
Section titled “Förutsättning”Du har jobbat igenom kmom01-kmom06 (och lämnat in dem). Det finns ingen anledning att påbörja projektet innan du är klar med kmom06.
Bedömning och betygsättning
Section titled “Bedömning och betygsättning”Det finns ett dokument som beskriver grunderna för bedömning och betygsättning av projektet och kursen som helhet.
Projektidé och upplägg
Section titled “Projektidé och upplägg”Du ska bygga ett quiz-program som körs i terminalen. Programmet läser in frågor från textfiler, presenterar dem en åt gången med fyra svarsalternativ och räknar ut hur bra det gick när quizet är klart. Varje fråga tillhör en kategori och är värd ett visst antal poäng.
Det finns valfria delar som du kan välja att göra för att öka dina chanser till ett högre betyg.
Projektspecifikation
Section titled “Projektspecifikation”Utveckla och leverera projektet enligt följande specifikation. Saknas info i specen kan du själv välja väg och dokumentera dina val i redovisningstexten.
I grundkraven ska det finnas fyra menyval:
1. Starta quiz med filen easy.txt2. Starta quiz med filen medium.txt3. Starta quiz med filen hard.txt4. Visa topplistan från scores.txtq. Avsluta programmetGenerell struktur
Section titled “Generell struktur”Koden ska ligga i src/kmom10/quiz.
- Skapa filen
main.pysom ska vara startpunkt för programmet. - Du måste skapa minst en till modul att dela upp din kod i.
- Skapa mappen
questionsiquiz-mappen och lägg dina frågefiler där. - Din kod ska vara DRY.
- Endast konstanter får ligga som globala variabler.
- Programmet ska kunna köras från
quiz-mappen. Det ska inte krascha om du står iquizoch startar programmet. - Koden ska validera med Ruff.
- Testerna som finns ska passera.
Väl fungerande program
Section titled “Väl fungerande program”Programmet ska fungera utan brister och inte krascha när man använder det enligt kraven.
- Programmet ska hantera ogiltiga menyval utan att krascha.
- Programmet ska hantera ogiltiga svar i quizet utan att krascha (t.ex. om användaren skriver
Eeller1istället för A–D). - Programmet ska inte krascha om
scores.txtsaknas eller är tom.
Frågefilernas format
Section titled “Frågefilernas format”Frågorna ligger i textfiler med en fråga per block. Varje fråga består av nio rader och blocken separeras med en blank rad.
<kategori><frågetext><alternativ A><alternativ B><alternativ C><alternativ D><rätt svar: A, B, C eller D><poängvärde: positivt heltal><ledtråd>Exempel på en frågefil med två frågor:
GeografiVad är Sveriges huvudstad?OsloStockholmKöpenhamnHelsinkiB3Stockholm ligger vid Mälaren och Östersjön.
HistoriaVilket år bildades Kungariket Sverige officiellt?82910009721523C2Det skedde under 900-talet.scores.txt
Section titled “scores.txt”Filen skapas om den inte finns.
Filen ska ligga i quiz/-mappen, alltså på samma nivå som main.py.
För varje quiz som genomförs ska du spara: namn, svårighetsgrad, totala poäng, poängprocent och tid i sekunder. Använd ett lämpligt format som gör det enkelt att läsa in och skriva ut topplistan.
Krav 1: Quiz
Section titled “Krav 1: Quiz”Menyval 1–3 startar ett quiz med respektive frågefil (easy.txt, medium.txt, hard.txt).
Ett quiz
Section titled “Ett quiz”- Läs in alla frågor från vald fil.
- Visa frågorna en i taget. Visa alltid frågans kategori och vilket frågenummer det är av totalt.
- För varje fråga:
- Visa frågans text och de fyra svarsalternativen märkta A–D.
- Läs in användarens svar. Svar är case-insensitive (
aochAär likvärdiga). Om svaret inte är A, B, C eller D — be användaren svara igen tills ett giltigt svar ges. - Tala om för användaren om svaret var rätt eller fel och hur många poäng de fick.
- Visa slututskriften när alla frågor är besvarade.
- Be användaren skriva in sitt namn och spara resultatet i
scores.txt. - Efter att resultatet sparats, visa ett meddelande och be användaren trycka Enter för att återgå till menyn.
- Rätt svar ger frågans fulla poängvärde.
- Fel svar ger 0 poäng.
Kategorier
Section titled “Kategorier”Håll koll på hur det gick per kategori. Spåra antalet rätta svar och totalt antal frågor per kategori. Skriv ut en kategorisammanfattning i slututskriften.
Slututskrift
Section titled “Slututskrift”Slututskriften ska innehålla:
- Antal rätta svar på formatet
X/Y. - Poängprocent:
(totalpoäng / maxpoäng) * 100, avrundat till en decimal med procenttecken. - Kategorisammanfattning: en rad per kategori med antal rätta svar och totalt antal frågor.
- Tid (läggs till i krav 3).
Exempel på slututskriften (utan tid):
Resultat: 1/2 rätta svarPoäng: 2/5 (40.0%)
Kategorier:Geografi : 0/1Historia : 1/1Krav 2: Topplista
Section titled “Krav 2: Topplista”Menyval 4 skriver ut resultaten från scores.txt.
- Utskriften ska vara grupperad på svårighetsgrad.
- Inom varje grupp sorteras poster på poängprocent i fallande ordning i första hand och tid i andra hand.
- Programmet ska inte krascha om
scores.txtsaknas — visa ett lämpligt meddelande istället. *. Efter att topplistan visats be användaren trycka Enter för att återgå till menyn.
Exempel:
Easy:Andreas 40.0% 2p 34.75sSara 20.0% 1p 22.10s
Hard:Sara 100.0% 5p 18.22sKrav 3: Tid
Section titled “Krav 3: Tid”Lägg till tidmätning med modulen time.
- Mät per fråga: från att frågan visas tills att användaren skickar sitt svar.
- Mät också total tid för hela quizet.
- Visa tid direkt efter varje svar.
- Inkludera total tid i slututskriften.
Tidsvärdena behöver inte avrundas i utskriften.
Uppdaterad slututskrift (med tid):
Resultat: 1/2 rätta svarPoäng: 2/5 (40.0%)Total tid: 10.47 sekunder
Kategorier:Geografi : 0/1Historia : 1/1Exempel
Section titled “Exempel”Nedanstående exempel visar ett quiz med frågorna från frågefilernas format. Dina utskrifter behöver inte vara identiska, men de måste innehålla samma information och korrekta beräkningar.
>>> markerar vad användaren skriver in.
1. Starta quiz med filen easy.txt2. Starta quiz med filen medium.txt3. Starta quiz med filen hard.txt4. Visa topplistan från scores.txtq. Avsluta programmet
Menyval: >>> 1
--- Fråga 1 av 2 ---Kategori: GeografiVad är Sveriges huvudstad?
A. OsloB. StockholmC. KöpenhamnD. Helsinki
Ditt svar: >>> AFel! Rätt svar var B. Du fick 0/3 poäng.Tid: 4.32 sekunder
--- Fråga 2 av 2 ---Kategori: HistoriaVilket år bildades Kungariket Sverige officiellt?
A. 829B. 1000C. 972D. 1523
Ditt svar: >>> CRätt! Du fick 2/2 poäng.Tid: 6.15 sekunder
Resultat: 1/2 rätta svarPoäng: 2/5 (40.0%)Total tid: 10.47 sekunder
Kategorier:Geografi : 0/1Historia : 1/1
Skriv in ditt namn: >>> Andreas
Resultatet har sparats. Tryck Enter för att återgå till menyn.Krav 4 (valfritt) 10p: Quiz-sammanfattning
Section titled “Krav 4 (valfritt) 10p: Quiz-sammanfattning”Lägg till en detaljerad sammanfattning som visas efter slututskriften men innan användaren skriver in sitt namn.
Sammanfattningen ska visa en rad per fråga med:
- Frågans text — trunkerad till 30 tecken om den är längre (lägg till
...om den trunkeras). - Användarens svar (bokstaven A–D).
- Rätt svar (bokstaven A–D).
- Poäng erhållna och frågans maxpoäng.
Exempel:
--- Sammanfattning ---Vad är Sveriges huvudstad?... Ditt svar: A Rätt: B Poäng: 0/3Vilket år bildades Kungarik... Ditt svar: C Rätt: C Poäng: 2/2Krav 5 (valfritt) 10p: Ledtrådar
Section titled “Krav 5 (valfritt) 10p: Ledtrådar”Låt användaren begära en ledtråd under ett quiz.
- Innan användaren svarar på en fråga kan de skriva
?för att visa ledtråden. - Att använda ledtråden kostar halva frågans poängvärde avrundat nedåt. Exempel: en fråga värd 3 poäng kostar 1 poäng i ledtrådsavgift, en fråga värd 4 poäng kostar 2 poäng.
- Minimum är 0 poäng per fråga — en ledtrådsavgift kan aldrig ge minuspoäng.
- Varje fråga kan bara ha en ledtråd. Om användaren skriver
?igen visas ledtråden utan extra avgift. - I slututskriften: visa totalt antal använda ledtrådar.
Exempel:
Ditt svar (eller ? för ledtråd): >>> ?Ledtråd: Stockholm ligger vid Mälaren och Östersjön.
Ditt svar (eller ? för ledtråd): >>> AFel! Rätt svar var B. Du fick 0/3 poäng. (Ledtråd använd, kostnad: 1 poäng)Krav 6 (valfritt) 10p: Slumpmässigt quiz
Section titled “Krav 6 (valfritt) 10p: Slumpmässigt quiz”Lägg till menyval 5: Slumpmässigt quiz.
- Användaren anger hur många frågor quizet ska innehålla.
- Frågorna väljs slumpmässigt från alla tre filerna kombinerade (
easy.txt,medium.txt,hard.txt). Ingen fråga ska förekomma mer än en gång i samma quiz. - Om användaren anger fler frågor än vad som finns tillgängligt körs quizet med alla tillgängliga frågor.
- Resultatet sparas i
scores.txtmed svårighetsgradenrandom. - Du får använda modulen
randomenbart för detta krav.
Krav inlämning
Section titled “Krav inlämning”- När du är klar taggar du ditt repo (v10.0.0 eller högre) och pushar till GitHub.
- Skapa den branch som ska användas för nästa inlämning.
Stå i kursmappen i terminalen och kör följande kommando:
Terminal window git branch -c bth/submit/kmom10git push -u origin bth/submit/kmom10 - När allt är klart och fungerar gör du en pull request (PR) mot branchen
bth/submit/kmom10. Du kan följa instruktionerna i Gör en Pull Request fast använd branchenbth/submit/kmom10.
Redovisning
Section titled “Redovisning”Svara på följande frågor i din redovisningstext för kmom10 i README.md.
-
Skriv ett allmänt stycke om hur projektet gick att genomföra. Problem/lösningar/strul/enkelt/svårt/snabbt/lång tid, etc. Var projektet lätt eller svårt? Tog det lång tid? Vad var svårt och vad gick lätt? Var det ett bra och rimligt projekt för denna kursen?
-
Vilka valfria delar gjorde du? Varför? Hur gick det?
-
Vilken är din TIL för detta kmom?
-
Vilken är din TIL för kursen som helhet?
-
(Valfritt) Avsluta med ett sista stycke med dina tankar om kursen och vad du anser om materialet och handledningen. Återkoppla till lärarteamet och förslå eventuella förbättringsförslag till kommande kurstillfällen.
-
(Valfritt) Är du nöjd/missnöjd? På en skala 1-10, vilket betyg ger du kursen?
Redovisningsvideo
Section titled “Redovisningsvideo”Du skall förbereda och utföra en slutpresentation av ditt projekt. Du kan läsa hur du kan förbereda dig i dokumentet “Planera din slutpresentation”. Läs mer om hur du kan spela in en redovisningsvideo med OBS.
När du gör din video tänk på att det vi vill se är att du har skrivit koden och att du förstår vad den gör.
- Lägg en länk till videon som en kommentar i din PR.
- Detta kan du göra dagen efter projektets deadline.
- Videon ska vara 5-8 minuter lång.
- Vi kan begära att du gör ett muntligt förhör om vi är osäkra på om du kan/har skrivit koden.