Kmom10: Projekt och examination
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.
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 och
timemodulen. - 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 och
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 utveckla ett program för att öva på att skriva snabbt på ett tangentbord. Det finns många webbsidor som erbjuder det redan, t.ex. https://www.keybr.com/, men vi ska skapa ett program för terminalen.
Det finns optionella 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 så kan du själv välja väg och dokumentera dina val i redovisningstexten.
Du ska implementera ett program för tangentbordsträning. Programmet går ut på att visa användaren en rad åt gången som användaren ska skriva av så snabbt som möjligt. När användaren har skrivit in en rad och efter att alla rader är skrivna då ska du räkna ut hur bra det gick och visa upp det.
I grundkraven ska det finnas 5 menyval:
1. Starta skrivtest med filen `easy.txt`.
2. Starta skrivtest med filen `medium.txt`.
3. Starta skrivtest med filen `hard.txt`.
4. Skriv ut resultatlistan som finns sparad i `scores.txt`.
q. Avsluta programmet.Generell struktur
Section titled “Generell struktur”Koden ska ligga i src/kmom10/typing.
- Skapa filen
main.pysom ska vara startpunkt för programmet. - Du måste skapa minst en till module att dela upp din kod i. PS! då får inte döpa någon fil till
typing.py. Om du gör det funkar inte testerna. - Skapa mappen
textsitypingmappen. - Ladda ner filerna som finns här. Lägg dem i mappen
src/kmom10/typing/texts. - Din kod ska vara DRY.
- Endast konstanter får ligga som globala variabler.
- Programmet ska köras från
typingmappen. Med andra ord, programmet ska inte krascha om jag står itypingoch startar programmet. - Koden ska validera med Ruff.
- Testerna som finns ska passera. Det är väldigt få tester som finns. I projektet får ni själva ha koll på att ni gör rätt.
Väl fungerande program
Section titled “Väl fungerande program”Programmet skall fungera utan brister och inte krascha när man använder det enligt kraven. Programmet ska kunna hantera att användaren råkar skriva fel i menyn.
Det ska gå att skriva in färre och fler tecken och ord än vad som skrivs ut utan att programmet kraschar.
Programmet ska inte krascha om filen som används till precisionshistorik saknas.
Krav 1: Skrivtest
Section titled “Krav 1: Skrivtest”- Menyval 1 ska använda filen
easy.txtför ett skrivtest - Menyval 2 filen
medium.txt - Menyval 3 filen
hard.txt. scores.txtska innehålla information om alla skrivtester som har genomförts.
Ett skrivtest
Section titled “Ett skrivtest”Ett test går ut på att läsa in alla rader från filen, presentera en rad åt gången för användaren. När en rad har presenterats ska användaren skriv av den så snabbt som möjligt. Efter det ska du skriv ut användarens prestation och gå vidare till nästa rad från filen. Återupprepa tills användaren har skrivit av alla rader. Mellan varje rad ska du skriva ut hur bra användaren har presterat på den raden.
Kolla på videon ovanför eller under exempel om du är osäker på hur det ska gå till.
När testet är klart ska du skriva ut användarens totala prestation och be användaren skriva in sitt namn. Lägg till namnet, användarens ordprecision och svårighetsgraden i filen scores.txt.
Prestation
Section titled “Prestation”Med prestation menas två saker, ordprecision och histogram över vilka ord användaren har skrivit fel.
Ordprecision
Section titled “Ordprecision”Ordprecision räknas ut med ((nr_correct_words - extra_words) / total_words_in_text ) * 100. Skriv ut med procenttecken avrundat till två decimaler.
nr_correct_wordsär antalet ord användaren har skrivit av korrekt.extra_wordsär ord som användaren har skrivit in för mycket. Om användaren ska skriva av en rad på fem ord och skriver in sju ord blir det tvåextra_words.total_words_in_textär hur många ord som finns i texten användaren ska skriva av.
Exempel:
Användaren ska skriva av Hello my name is Andreas.
Användaren skriver in Hellå m name andreas.
Det ger ordprecision:
Ordprecision: 20.0%Noter:
- Orden är separerade med mellanslag.
- Punkttecken har ingen speciell betydelse. T.ex. strängen
hej. p-å diginnehåller tre ord,hej.,p-åochdig. - din lösning ska vara case sensitive,
A!=a. - Skilj på raderna. Om användaren skriver in ett ord för lite eller för mycket på en rad ska det inte påverka orden på raderna efter.
Histogram
Section titled “Histogram”Gör ett histogram över hur många gånger användaren skriv av ett ord fel. Spara inte användarens ord, spara ordet användaren skulle skriva av. I histogrammet använd # för att markera ett fel.
Histogrammet ska vara sorterat på antalet i första hand och ordet i andrahand. Sortera från högt till lågt.
Exempel där my är felstavat 4 gånger, Hello 2 gånger och Andreas 2 gånger:
my : ####Hello : ##Andreas : ##Slututskrift
Section titled “Slututskrift”Utskriften efter ett skrivtest är klart ska innehålla användarens prestation för hela testet och information om tidsprestanda.
Exempel:
Ordprecision: 23.08%is : ###name : ##My : #Da : #Andreas : #Det tog 0.0 minuter och 2.160712718963623 sekunderGross WPM: 10.0Net WPM: 0.0Accuracy: 0%Du skriver snabbt som en SengångareDu kan se en körning för exemplet ovanför under exempel.
Krav 2: Time
Section titled “Krav 2: Time”För menyval 1-3, räkna ut hur lång tid det tar för användaren att skriva in hela texten i sekunder. Mät tiden från precis innan du skriver ut första raden till att användaren har skrivit in sista raden.
Använd dig av modulen time för att mäta tiden.
Räkna ut Gross WPM, Net WPM, Accuracy och djurkategori.
I uträkningarna för WPM, avrunda minuter enligt:
- avrunda uppåt om det tog X minuter och över eller 30 sekunder. T.ex. 3 minuter och 33 sekunder blir 4 minuter.
- Om det är under 30 sekunder avrunda ner. T.ex. 2 minuter och 15 sek blir 2 minuter.
- Allt under 1 minut avrundas upp till en minut.
Gross WPM
Section titled “Gross WPM”Räkna ut gross words per minute, antal skrivna ord / minuter. I antal skrivna ord ingår alla ord som användaren har skrivit, även extra ord (om användaren skriver fler än efterfrågat). Avrunda till två decimaler i utskriften.
Net WPM
Section titled “Net WPM”Räkna ut net words per minute, gross wpm - ((felstavade ord + extra ord) / minuter). I felstavade ord ingår alla ord som räknas som felstavade, inte bara ord användaren skriver in. Så om användaren skriver in ett ord för lite räknas det ordet som felstavat. Avrunda till två decimaler i utskriften.
Accuracy
Section titled “Accuracy”Räkna ut accuracy, det procentuella förhållande mellan Gross WPM och Net WPM. Uträkningen är (net / gross) * 100. Skriv ut med procenttecken och avrunda till två decimaler.
Kategori
Section titled “Kategori”Ge användaren ett djur som representerar hur snabbt de skrev, baserat på vilken net WPM den fick. När användaren är färdig med ett test visa vilken djur den är. Nedanför hittar du vilka djur som representerar vilka net WPM.
| Net wpm | Djur |
|---|---|
| 0 - 5 | Sloth |
| 6 - 15 | Snail |
| 16 - 30 | Manatee |
| 31 - 40 | Human |
| 41 - 50 | Gazelle |
| 51 - 60 | Ostrich |
| 61 - 70 | Cheetah |
| 71 - 80 | Swordfish |
| 81 - 90 | Spur-winged goose |
| 91 - 100 | White-throated needletail |
| 101 - 120 | Golden eagle |
| > 121 | Peregrine falcon |
Krav 3: Menyval 4
Section titled “Krav 3: Menyval 4”Skriv ut resultaten som är sparade i scores.txt filen. Utskriften ska vara grupperad på svårighetsnivå och sorterad baserat på ordprecision i förstahand och namn i andrahand. Sortera från högt till lågt.
Exempel:
efo 50.0 mediumklw 19.22 mediumand 19.65 hardand 0.53 hardaa 23.08 easyAa 23.08 easyExempel
Section titled “Exempel”Om din kod körs med exempeltexten nedanför ska du få samma uträkningar som visas i exemplet. Ett tips är att lägga texten i en fil och köra programmet där du skriver samma input som visas.
Här kan du se ett exempel med input från användaren. Dina utskrifter måste inte vara formaterad exakt som min, men din utskrift måste innehålla rätt resultat som min gör.
Text från filen:
“Hello my name is Andreas"
"What is your name"
"My name is Da”
Input från användaren:
“Hello my nme os andreas"
"What us your nameaa ko"
""
På sista raden skriver användaren inte in något utan trycker bara på Enter på tangentbordet.
Det ger följande utskrift under körning, >>> Används för att markera vad användaren skriver in:
Skriv in: Hello my name is Andreas>>> Hello my nme os andreas
Ordprecision: 40.0%name : #is : #Andreas : #
Skriv in: What is your name>>> What us your nameaa ko
Ordprecision: 25.0%name : #is : #
Skriv in: My name is Da>>>Ordprecision: 0.0%name : #is : #My : #Da : #
Grattis! Tryck enter för att se resultatet.>>>
Ordprecision: 23.08%name : ###is : ###My : #Da : #Andreas : #Det tog 0 minuter och 2.160712718963623 sekunderGross WPM: 10.0Net WPM: 0.0Accuracy: 0%Du skriver snabbt som en Sengångare
Skriv in ditt namn:>>> AndreasKrav 4 (optionellt) 20p: Tecken
Section titled “Krav 4 (optionellt) 20p: Tecken”Lägg till teckenprecision och histogram för tecken i skrivtesterna.
Teckenprecision och tecken histogram ska räknas ut och skrivas ut efter varje rad precis som för prestation
Teckenprecision
Section titled “Teckenprecision”Teckenprecision med ((nr_correct_chars - extra_chars) / total_chars_in_text ) * 100. Skriv ut med procenttecken avrundat till två decimaler.
nr_correct_charsär antalet tecken användaren har skrivit av korrekt.extra_charsär tecken som användaren har skrivit in för mycket.total_chars_in_textär hur många tecken som finns i texten användaren ska skriva av. Räkna inte med mellanslag.
För att räkna vilka tecken som är rätt; dela först upp texten i ord (dela på mellanslag) och jämför sen tecken för tecken i orden.
Det innebär att mellanslag inte räknas som ett tecken, det är en separator för ord. Om användaren skriver in fler tecken än vad som efterfrågas i ett ord ska du räkna dem som extra_chars.
Histogram för tecken
Section titled “Histogram för tecken”Räkna också ut hur många gånger varje korrekt tecken blev felskrivet. Utgå från de korrekta tecknen när du du kollar om de är rätt, inte användarens input.
Skriv ut ett histogram med resultatet. Likt histogrammet för ord.
Exempel
Section titled “Exempel”Om din kod körs med exempeltexten nedanför ska du få samma uträkningar som visas i exemplet. Ett tips är att lägga texten i en fil och köra programmet där du skriver samma input som visas.
Här kan du se ett exempel med input från användaren. Dina utskrifter måste inte vara formaterad exakt som min, men din utskrift måste innehålla data som min gör.
Text från filen:
“Hello my name is Andreas"
"What is your name"
"My name is Da”
Input från användaren:
“Hello my nme os andreas"
"What us your nameaa ko"
""
På sista raden skriver användaren inte in något utan trycker bara på Enter på tangentbordet.
Det ger följande utskrift under körning, >>> Används för att markera vad användaren skriver in:
Skriv in: Hello my name is Andreas>>> Hello my nme os andreas
---------Grundkrav-------------Ordprecision: 40.0%name : #is : #Andreas : #---------Extrauppgifter-------------Teckenprecision: 75.0%Felstavade tecken:m : #i : #e : #a : #A : #
Skriv in: What is your name>>> What us your nameaa ko
---------Grundkrav-------------Ordprecision: 25.0%name : #is : #---------Extrauppgifter-------------Teckenprecision: 64.29%Felstavade tecken:i : #
Skriv in: My name is Da>>>---------Grundkrav-------------Ordprecision: 0.0%name : #is : #My : #Da : #---------Extrauppgifter-------------Teckenprecision: 0.0%Felstavade tecken:a : ##y : #s : #n : #m : #i : #e : #M : #D : #
Grattis! Tryck enter för att se resultatet.>>>---------Grundkrav-------------Ordprecision: 23.08%name : ###is : ###My : #Da : #Andreas : #Det tog 0 minuter och 2.160712718963623 sekunderGross WPM: 10.0Net WPM: 0.0Accuracy: 0%Du skriver snabbt som en Sengångare---------Extrauppgifter-------------Teckenprecision: 54.55%Felstavade tecken:i : ###a : ###m : ##e : ##y : #s : #n : #M : #D : #A : #
Skriv in ditt namn:>>> AndreasKrav 5 (optionellt) 10p: Skrivtest med slumpade tecken
Section titled “Krav 5 (optionellt) 10p: Skrivtest med slumpade tecken”Lägg till menyval 5. I det menyvalet ska användaren välja ett antal sekunder som testet ska pågå. Under så många sekunder ska du slumpa fram ett tecken (bokstäver, siffror och punkter) som användaren ska skriva in så snabbt som möjligt. Inkludera användarens sista input om tiden tar slut under tiden som programmet väntar på att användaren ska skriva.
När tiden har tagit slut ska du skriva ut vilka tecken som blev fel, samt antalet gånger varje felaktigt tecken skrevs. Räkna också ut och skriv ut hur många procent av tecknen som blev fel och antalet tecken per minut som användaren skrev.
Utskriften ska vara sorterad i storleksordning på antalet fel.
Kolla på videon för att se hur det kan se ut.
Krav inlämning
Section titled “Krav inlämning”- Skriv all din kod i din branch main.
- När du är klar så taggar du ditt repo (v7.0.0 eller högre) och pushar till GitHub.
- När allt är klart och fungerar så gör du en pullrequest (PR) mot branchen
bth/submit/kmom10. Du kan följa instruktionerna i glr en Pull Request fast använd branchbth/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?
-
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.