Laboration 6: Set och arv
- Inlämningsdatum 25 nov 2022 av 18:00
- Poäng 1
- Lämnar in en filuppladdning
- Filtyper py, pdf och txt
Innehåll:
Läsa dokumentation, set, arv, filer
Läs om set och arv i kursboken, och repetera avsnittet om filer.
Bägge gruppmedlemmarna ska lämna in labben.
Uppgift 1: Definiera ny klass Foodset
Ingredienser till en maträtt kan lagras i en set Links to an external site. (som är inbyggd i Python). Men om vi också vill ha egna metoder kan vi skapa en egen klass som ärver från set.
- Definiera en egen klass Foodset som subklass till set.
- Metoden __init__ behöver du inte definiera - klassen Foodset ärver den som finns i set.
- Metoden __str__ ska definieras (överlagras). Istället för utskriften {'ris', 'lax', 'lök'} vill vi ha ris lax lök Tips: se Föreläsning 10
- Lägg också till metoderna
- simple (returnerar True om antal element är mindre än 6)
- Extrauppgift: ordered (returnerar en sorterad lista av elementen)
- Skapa ett Foodset-objekt och kontrollera att metoderna du skrivit fungerar.
Uppgift 2: Läs in från fil
- Skapa ett nytt program Labb6.py. Låt programmet läsa in data från filen ingredienser.txt (finns även en förbättrad version utan semikolon i slutet av raden: ingredienser.txt Download ingredienser.txt )
- För varje maträtt ska ingredienserna (dvs allt utom första strängen) läggas in i ett Foodset-objekt.
- Namnet på maträtten (dvs första strängen) och Foodset-objektet ska skrivas ut, så här:
Pannkakor innehåller vetemjöl gluten salt mjölk ägg smör Rårakor innehåller potatis smör mjölk salt |
Uppgift 3: Definiera klassen Recipe
Nu vill vi ha objekt som representerar ett recept. Definiera klassen Recipe i en ny programfil (klassen ska senare importeras till Labb6.py)
Attributen i Recipe ska vara:
- Maträttens namn: dish (en sträng)
- Ingredienser: ingredients (en Foodset)
Du får själv bestämma vilka metoder klassen ska ha. Glöm inte att testa att metoderna fungerar.
Uppgift 4: Lista av Recipe-objekt
Här kan du utgå från det program Labb6.py som du skrev i Uppgift2.
- Importera din klass Recipe till Labb6.py.
- Skapa en tom lista.
- Titta på for-slingan där du läser in från filen. Sedan tidigare har du redan skapat Foodset-objekt.Nu ska du
- skapa ett Recipe-objekt
- lägga in det i listan
- Testa att du har en lista med
Uppgift 5: Fråga användaren
- Lägg till en fråga till användaren om vad hen inte äter, till exempel så här:
Vad är du allergisk mot? ägg gluten selleri |
- Läs in svaret och skapa ett nytt Foodset-objekt.
- Skriv ut objektet så att du ser att det fungerar.
Uppgift 6: Skriv ut allergener
- Ändra utskriften från programmet så att det bara skriver ut allergenerna, alternativt texten "inga av dina allergener" Använd lämpliga set-operationer. Körexempel:
Vad är du allergisk mot? ägg gluten selleri Pannkakor innehåller gluten ägg Rårakor innehåller inga av dina allergener |
Uppgift 7: Skriv ut på fil
- Öppna en ny fil för utskrift och låt programmet skriva ut all information på filen.
- Låt användaren välja filnamnet för utfilen. Körexempel:
Vad är du allergisk mot? ägg gluten selleri Vilken fil vill du skriva ut på? matkoll.txt Utskriften finns nu på filen matkoll.txt |
Filen matkoll.txt ska nu innehålla texten:
Pannkakor innehåller gluten ägg Rårakor innehåller inga av dina allergener |
Testning
Glöm inte att testa att ditt program fungerar som det ska.
Krav (se Peer review Links to an external site.)
Krav för programmen i labb 6:
- Klasserna Foodset och Recipe ska definieras
- Klassen Foodset ska vara subklass till set
- Programmet ska använda set-operationer för att kolla allergener.
- Programmet ska läsa in data från en fil och skapa en lista med objekt.
- Programmet ska fråga användaren om allergener.
- Programmet ska skriva ut data på fil.
- ... och dessutom ska programmet uppfylla följande krav från tidigare labbar:
- Programmet ska ha en kommentar överst med författarnas namn och datum.
- Programmet ska vara uppdelat i funktioner med lämpliga parametrar och returvärden.
- Varje funktion/metod ska ha en förklarande kommentar.
- Inga globala variabler får förekomma (i funktioner eller metoder).
- Variabel-/funktions-/attribut-namn ska göra programmet lättare att förstå.
- Klasser och funktioner ska stå överst i programfilen, övriga satser ska stå längst ner (blanda inte).
- Testdata ska finnas med i kommentar sist i programmet.
Efter labben
Hur gör du när du löser ett problem med programmering? Har du någon strategi? Skissar du på papper först eller skriver kod direkt? Hur ofta provkör du?
Frivilliga extrauppgifter:
- Lägg till en metod powerset (potensmängden) i din Foodset. Testa att den fungerar.
- Skriv ett nytt program MasterChefHelper som
- Läser in en rad ingredienser,
- skapar potensmängden av ingredienserna,
- går igenom potensmängden...
- ...och kontrollerar om det finns något/några recept i filen som matchar någon av mängderna.
Matris
Kriterier | Bedömningar |
---|---|
Vilka metoder har klassen Foodset?
|
|
Vilka metoder har klassen Recipe?
|
|
Lagras ingredienserna i ett Foodset-objekt?
|
|
Lagras raderna i Recipe-objekt som läggs i en lista?
|
|
Ser utskriften bra ut?
|
|
Vilka set-operationer används?
|
|
Fungerar utskriften på fil?
|
|
Hur är programmet uppdelat i funktioner? Föreslå en alternativ uppdelning!
|
|
Finns det en kommentar överst med författarnas namn och datum?
|
|
Är variabelnamnen lämpliga? Föreslå förbättringar!
|
|
Titta på testdata. Skulle du ha testat något mer?
|
|
Tips till arbetet med den individuella P-uppgiften
|