Marvin - steg 1
Programmering och problemlösning i Python, du skall bygga en chattbot Marvin som kan svara på “alla” dina frågor.
Förkunskaper
Section titled “Förkunskaper”Du har jobbat allt material i “kmom02”.
Introduktion
Section titled “Introduktion”Kopiera grundkoden för din Marvin enligt följande.
# Ställ dig i kurskatalogencurl -L -o src/kmom02/marvin1/marvin.py https://raw.githubusercontent.com/dbwebb-se/python/refs/heads/master/example/marvin/marvin.py
Gå till katalogen och testkör Marvin.
cd src/kmom02/marvin1/uv run marvin.py
Öppna koden i en texteditor och titta igenom hur marvin.py
fungerar.
Nu kan du börja jobba.
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. Egenskapade funktioner får användas först i kmom03 och listor får användas först i kmom04.
-
Sök på bilder på Asciiart (eller motsvarande) och hitta din egen bild på “Marvin”. Lägg in din bild i programmet och ersätt den med bilden på Marvin.
-
Organisera din kod i
if
-satsen inutiwhile
-loopen. Samla all kod i filenmarvin.py
. Se till att dina menyval har samma siffra som det står i kraven. -
Uppdatera menyval 1 för att berätta vad du heter. Byt ut hälsningsfrasen mot en annan. Du kan även byta namnet på din “Marvin”, om du vill.
-
Menyval 2: Celsius till Fahrenheit. Marvin ska fråga efter en temperatur i Celsius och sedan skriva ut en sträng som skall innehålla motsvarande i Fahrenheit. Värdet skall avrundas till två decimaler.
Formell:
[°F] = [°C] * 9 / 5 + 32
.input: 135.205 output: "275.37" -
Menyval 3: Poäng till betyg, Marvin ska fråga efter maxpoäng samt dina poäng och sedan ska Marvin skriva ut vilket betyg dina poäng motsvarade. Använd betygsskalan:
Score Grade>= 90% A>= 80% B>= 70% C>= 60% D>= 50% E< 50% FFormatera output enligt
score: <betyg>
.input: "100"input: "49" output: "score: F"input: "70"input: "50" output: "score: C" -
Menyval 4: Lägg till så att Marvin frågar efter tal och för varje tal angivet så ska Marvin skriva ut “larger!” om det nya talet är större, “smaller!” om det var mindre eller “same!” om talet som skrev in hade samma värde som det föregående talet. Första gången man startar menyvalet kommer Marvin inte ha något tal att jämföra med, då skall den be användaren att mata in två tal. Detta ska göras tills användaren skriver “done”. Använd try-except för att hantera om användaren skriver in något som inte är en siffra. Om användaren gör det ska programmet inte krascha. Istället ska det skriva ut
"not a number!"
och sen fortsätta med loopen så att användaren kan fortsätta skriva in siffror.Exempel:
input: 1input: 2 output: "larger!"input: 2 output: "same!"input: 1 output: "smaller!"input: "hej" output: "not a number!"input: 3 output: "larger!"input "done" -
Menyval 5: Gör så att Marvin kan validera personnummer med hjälp av Luhnalgoritmen. Algoritmen funkar på så sätt att varannan siffra multipliceras med 2 och 1, med start på första siffran i personnumret. Om något tal vid multiplikationen blir större än 9 ersätts det talet med dess siffersumma. Därefter summeras alla tal och om summan är jämt delbar med 10 så är kontrollsiffran korrekt. Om personnumret validerar ska Marvin skriva ut
Valid
annarsNot valid
. Koden ska klara av personnummer med och utan-
innan de fyra sista siffrorna och om det är för få eller för många siffror skickas med ska det bliNot valid
.8 1 1 2 1 8 9 8 7 6* 2 1 2 1 2 1 2 1 2 1---------------------------^ ^ ^ ^ ^ ^ ^ ^ ^ ^16 1 2 2 2 8 18 8 14 6Vilket blir
1 + 6 + 1 + 2 + 2 + 2 + 8 + 1 + 8 + 8 + 1 + 4 + 6 = 50
som är delbart med 10.Exempel:
input: "811218-9876" output: "Valid"input: "231218-9874" output: "Not valid"input: "8181818181" output: "Valid" -
Menyval 6: Gör så Marvin kan tala rövarspråket. Marvin ska använda ett input anrop för att ta emot ett ord och sen skriva ut ordet översatt till rövarspråket. Följande bokstäver är vokaler: “A, E, I, O, U, Y, Å, Ä, Ö”
Exempel:
input: "b" output: "bob"input: "apa" output: "apopa"
Extrauppgift
Section titled “Extrauppgift”-
Menyval a1: Gör ett val där Marvin tar emot två
input()
i from av strängar. Den skall sedan kolla om alla bokstäver i den andra strängen finns i den första. Om en bokstav i den andra strängen förekommer flera gånger måste den finnas minst samma antal gånger i den första. Exempel:input: "Python", "phno" output: "Match!"input: "Programming", "gram" output: "Match!"input: "kassler", "kusl" output: "No match!"input: "mister", "misse" output: "No match!" -
Menyval a2: Dubblera tills det innehåller alla siffror, gör ett menyval där Marvin räknar ut hur många gånger ett tal behöver multipliceras med två för att talet ska innehålla alla siffror mellan 0 och 9 minst en gång. Menyvalet ska ta två inputs, ett som är talet som ska multipliceras och ett input som är hur många gånger den ska försöka multiplicera innan den ger upp. Om den inte lyckas innan den ska ge upp returnera -1. Exempel:
input: 1, 1000 output: "68 times" (295147905179352825856)input: 1234567890, 1000 output: "0 times"input: 555, 10 output: "-1 times" -
Menyval a3: Slå ihop namn, gör ett menyval där Marvin tar emot två namn, du kan räkna med att båda namnen bara innehåller små bokstäver. Slå ihop namnen till ett, ex. “brad” och “angelina” blir “brangelina”. I det första namnet ska du hitta första vokalen och spara alla konsonanter framför den, ex. “brad” blir “br” och “ben” blir “b”. I det andra namnet ta bort alla konsonanter från början till första vokalen, ex. “brad” blir “ad”, “angelina blir “angelina” och “sheldon” blir “eldon”. Konkatenera sen den sparade delen från det första namnet med den sparade delen från det andra namnet. Vokalerna är
"a e i o u y"
, vi räknar inte med"å ä ö"
. Exempel:input: "brad", "angelina" output: "brangelina"input: "sheldon", "amy" output: "shamy"input: "ross", "rachel" output: "rachel"input: "britain", "exit" output: "brexit" -
Menyval a4: Räkna poäng, gör ett menyval där Marvin tar emot en input som ska vara en lång sträng med där varannan karaktär är en bokstav och varannan är en siffra, ex
"a2b4A5s3B1"
. En bokstav representerar en spelare och efterföljande siffra är dess poäng. Om bokstaven är liten, får spelaren poäng, om det är en stor bokstav förlorar spelaren poäng. Räkna ut och skriv ut varje spelares totala poäng.
I exemplet ovanför finns tre spelare, A,B och S. A’s poäng blir 2 - 5, B’s poäng är 4 - 1 och för S blir uträkningen 3.
Notera att utskriften ska vara formaterad som i exemplet nedanför, inget mellanrum före första bokstaven och inget komma efter sista siffran. Exempel:input: "a2b4A5s3B1" output: "a -3, b 3, s 3"input: "g3l1H5l2G3l1" output: "g 0, l 4, h -5"Tip, nästla två for-loopar.
Övrigt
Section titled “Övrigt”Här finns övriga saker som är bra att tänka på.
- Använd
uv run tester tests/kmom02/marvin1 --tags <menyval>
för att bara köra testerna för menyvalet du jobbar med. Du kan användauv run tester tests/kmom02/marvin1 -s
för att se alla taggar som finns och vilka tester de kör.- Varje menyval har samma tag som dess siffra för valet.
- Gör många och små commits i ditt git repo, du kan ha ungefär 5-10 commits för en sådan här uppgift.