Till KTH:s startsida Till KTH:s startsida

Laboration 6

Laboration 6

Läs om set och arv i kursboken, och repetera avsnittet om filer

Labben redovisas på veckans övning. Det Pythonprogram du skriver kan ge 0-2 bonuspoäng (beroende på hur väl det uppfyller kraven).
Instuderingsfrågorna redovisas med ett prov, som också kan ge max 2 bonuspoäng.

Uppgift 1: Läxa

Uppgift 2: Skapa en ny klass

Definiera en egen klass Foodset som subklass till set

  • Metoden __init__  behöver du inte definiera - den som redan finns i set kan användas.
  • Metoden __str__ ska överlagras. Istället för utskriften {1, 2, 3} vill vi ha 1 2 3 dvs inga parenteser runt mängden och mellanslag istället för komma mellan elementen.
  • Lägg också till en egen metod, t ex simple (True om antal element är mindre än 6)
  • Testa att dina nya metoderna fungerar.

Uppgift 3: Läs in från fil

  • Låt programmet läsa in data från filen ingredienser.txt
  • För varje maträtt ska ingredienserna läggas in i ett Foodset-objekt...
  • ...och maträtten och Foodset-objektet ska skrivas ut, så här:
     
Pannkakor innehåller vetemjöl gluten salt mjölk ägg smör mjölk
Rårakor innehåller potatis smör mjölk salt

...

Uppgift 4: 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 5: 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 6: 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

Lägg upp ditt färdiga program i Dropbox

Testning

Glöm inte att testa att ditt program fungerar som det ska.

Krav

Krav för programmen i labb 6:

  • Klassen Foodset ska vara subklass till set
  • Foodset ska ha nya metoder enligt ovan.
  • Programmet ska använda set-operationer för att kolla allergener.
  • Programmet ska läsa in data från en fil och skriva ut på en annan 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.
    • Programfilen ska kopieras till gruppens Dropbox-katalog.

Instuderingsfrågor

  1. år det att lagra ett eget objekt (t ex Land) i en set?
  2. Vilka av följande operatorer finns för set: & % * -
  3. Vad är det för skillnad på set och frozenset?
  4. Nämn någon operation som finns för set men inte för frozenset.
  5. Går det att sortera en set?
  6. Vad innebär det om set1 < set2 är True?
  7. Var i Pythons dokumentation finns alla random-funktioner beskrivna?
  8. Hur används random.seed()?
  9. Hur öppnar man en fil för utskrift?
  10. Vad händer om filen redan finns när den öppnas för utskrift?
  11. Vilken sats motsvarar print vid utskrift på fil?
  12. Hur får man radbyte vid utskrift på fil?

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.

Lärare Linda Kann skapade sidan 22 februari 2016