Koldioxidutsläpp för studenter
Nu lämnar vi Marvin bakom oss och tyglarna blir lite friare.
Förkunskaper
Section titled “Förkunskaper”Du har jobbat allt material i “kmom05”
Introduktion
Section titled “Introduktion”Du ska utveckla program som kan analysera studenters koldioxidutsläpp. Programmet ska kunna hantera flera kategorier av utsläpp, till exempel transport, mat och energi, och ge användaren möjlighet att:
- Visa totalutsläpp per student
- Visa den “grönaste” studenten
- Visa utsläpp per kategori
- Rangordna studenter per kategori
- Lägg till eller uppdatera studenters utsläpp
- Ta bort studenter från systemet
Programmet ska funka på liknande sätt som Marvin, en meny loop.
Se hur det kan se ut när uppgiften är klar:
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.py
i mappensrc/kmom05/emissions
. Imain.py
ska funktionenmain()
ligga och starta ditt program.- Strukturera main.py på 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.
-
Du ska strukturera din kod i passande moduler. Du måste skapa minst en modul utöver
main.py
. -
Utgå ifrån följande datatset i din kod.
students_data
är en dictionary där studenternas namn tillsammans med ID är en tuple och funkar som nyckel för att komma åt deras utsläppsdata.students_data = {("Bob", 102): {"transport": 5, "food": 15, "energy": 20},("Dana", 104): {"transport": 40, "food": 10, "energy": 15},("Alice", 101): {"transport": 15, "food": 25, "energy": 30},("Charlie", 103): {"transport": 10, "food": 13, "energy": 25, "waste": 5},}students_data
får inte vara en global variabel i din kod. Lägg den i dinmain()
funktion.- När du skriver din kod behöver du tänka på att det kan finnas studenter som inte har alla kategorier.
-
Programmet ska ha en följande menyval: Utförlig förklaring av menyvalen hitta du under Menyvalen
1. Visa totalutsläpp per student2. Visa den grönaste studenten3. Visa utsläpp per kategori4. Rangordna studenter per kategori efter störst utsläpp5. Lägg till eller uppdatera student6. Ta bort studentq. Avsluta programmet- Efter varje menyval ska du be användaren om en tom input() så att utskriften pausas till användaren vill gå vidare. Precis som i Marvin.
-
Felhantering
- Ogiltiga menyval ska ge ett tydligt felmeddelande.
- Programmet ska inte krascha.
- Du kan anta att alla input 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: Summera de totala utsläppen i alla kategorier för varje student och skriv ut hur mycket varje student släpper ut. Formatera utskriften enligt
<namn> (<id>): <x> kg CO2
. T.ex. blir detAlice (101): 70 kg CO2
för Alice. - 2: Skriv vilken student som har minst totala utsläpp. Formatera utskriften enligt
<namn> (<id>): <x> kg CO2
. T.ex. blir detBob (102): 40 kg CO2
för Bob.- Om det inte finns några studenter ska du skriva ut
Ingen studentdata tillgänglig.
.
- Om det inte finns några studenter ska du skriva ut
- 3: Summera och skriv ut hur mycket utsläpp som görs i varje kategori. Formatera enligt
<kategori>: <x> kg CO2
. T.ex. blir detwaste: 5 kg CO2
för waste i originaldatan. - 4: Rangordna studenterna efter vem som släpper ut mest koldioxid inom en kategori och skriv ut dem. Formatera enligt
<rank>. <namn> (<id>): <x> kg CO2 från <kategori>
.- Menyvalet ska använda ett
input()
för att fråga användaren om vilken kategori som ska sammanställas. - sortera studenterna på mängden utsläpp i första hand och namn i andrahand.
- T.ex. om två studenter ha samma mängd utsläpp ska de sorteras baserat på deras namn i bokstavsordning.
- Om en student saknar kategorin ska den fortfarande finnas med i utskriften med 0 kg utsläpp.
- Exempel med originaldatan och kategori
waste
.1. Charlie (103): 5 kg CO2 från waste2. Alice (101): 0 kg CO2 från waste3. Bob (102): 0 kg CO2 från waste4. Dana (104): 0 kg CO2 från waste
- Menyvalet ska använda ett
- 5: Lägg till eller uppdatera en student i datan. Om en student med samma namn och ID redan finns i datan ska du uppdatera eller lägg till utsläppen för kategorin.
- Menyvalet ska ta fyra
input()
- namn
- ID
- kategori
- mängd utsläpp
- När du har lagt till datan ska du skriva ut
Data uppdaterad för <namn> (<id>)
- Det kan se ut så här:
Välj ett alternativ: 6Studentnamn: BobStudent-ID: 102Kategori: wasteUtsläppsvärde (kg CO2): 10Data uppdaterad för Bob (102).
- Menyvalet ska ta fyra
- 6: Ta bort en student från datan. Namn och ID används tillsammans för att identifiera en student.
- Menyvalet ska ta två
input()
:- namn
- ID
- Om användaren finns och tas bort ska du skriva ut
<name> (<id>) har tagits bort
- Om användaren inte finns ska du skriva ut
Student <namn> (<id>) hittades inte.
- Menyvalet ska ta två
- q: Avsluta programmet
- Ogiltig input: Gör en fin utskrift och återgå till menyn
- Börja med att implementera datasetet och menyn med några grundläggande val, t.ex. visa totalutsläpp.
- Bygg sedan ut valen steg för steg: lägg till/uppdatera, rangordna, ta bort.
- Testa programmet ofta för att säkerställa att alla menyval fungerar.
- Kommentera koden tydligt för att underlätta läsbarhet.
- I testerna har varje menyval sin siffra som tag, om du vill kontrollera vilka tester som körs.