DD1315 HT20 (51386)
    Laboration (6) klasser och objekt
    Hoppa över till innehåll
    Översikt
    • Logga in
    • Översikt
    • Kalender
    • Inkorg
    • Hjälp
    Stäng
    • Min översikt
    • DD1315 HT20 (51386)
    • Uppgifter
    • Laboration (6) klasser och objekt
    • Startsida
    • Moduler
    • Quiz
    • Media Gallery

    Laboration (6) klasser och objekt

    • Inlämningsdatum 1 okt 2020 av 23.59
    • Poäng 1
    • Lämnar in en filuppladdning

    pandoc --no-highlight --filter pandoc-xnos --mathml -t html instruction.md

    Laboration: Klasser och objekt

    I förra laborationen lär vi användaren mata in ett filnamn och programmet läste därefter qq-värdena från filen och returnerade summan.

    I den här laborationen ska vi förenkla hanteringen av olika geometriska summor.

    Uppgift

    Nu ska vi skriva klasser som hanterar talföljder. Låt klasserna vara en del av en modul för talföljder. De ska hantera den karakteristiska egenskapen för en talföljd: det ska gå att få ut det nn:te elementet (använd __getitem__).

    Med den egenskapen och om du använder __getitem__ kan vi skriva kod som följande:

    import my_sequence_library as myseq
    import input_type as it # https://github.com/dbosk/intropy/raw/master/classes/lab/input_type.py
    
    def main():
      a1 = it.input_type(int, "a1 = ")
      d = it.input_type(int, "d = ")
    
      # Skapa talföljdsobjekt
      a = myseq.ArithmeticSequence(a1, d)
    
      # Skriv ut de första 20 elementen
      for i in range(20):
        print(f"a[{i}] = {a[i]}")
    
      # Skriv ut summan av de första 20 elementen
      print(f"sum(a) = {sum(a[:20])}")
    
      g1 = it.input_type(float, "g1 = ")
      q = it.input_type(float, "q = ")
      g = myseq.GeometricSequence(g1, q)
      print(f"g[12] = {g[12]}")
      
      try:
        print(f"g[-1] = {g[-1]}")
      except IndexError:
        print("Finns inget sista tal i en oändlig talföljd")
    
      filename = it.input_type(str, "filename = ")
      gf = myseq.MultiplicativeSequenceFromFile(filename)
      print(f"gf[12] = {gf[12]}")
    
      try:
        print(f"gf[1000] = {gf[1000]}")
      except IndexError:
        print("På tok för stort index.")
    
    if __name__ == "__main__":
      main()

    Ovan nämnda egenskap (indexering, __getitem___) är sann för alla talföljder, vare sig de är aritmetiska, geometriska eller något annat. Då kan vi ha en generell klass för talföljder och sedan specialiserade klasser för aritmetiska och geometriska talföljder. Så vi skulle kunna byta ut a = myseq.ArithmeticSequence(a1=1, d=2) mot a = myseq.MultiplicativeSequenceFromFile("file.txt") (som läser in en sekvens från fil, likt föregående laboration) och resten av koden i exemplet ovan kommer att fortsätta att fungera.

    För raden sum(a[:20]) (se här för förklaring av notationen) krävs att din kod hanterar sliceobjekt. Följande exempelkod är bra att experimentera med:

    class Test:
      def __getitem__(self, key):
        return key
    
    t = Test()
    print(t[0])
    print(t[:10])
    print(t[4:7])
    slice_object = t[4:7]
    print(slice_object.start)
    print(slice_object.stop)
    print(slice_object.step)
    print(isinstance(t[4:8], slice))
    print(isinstance(t[4], slice))

    Inlämning: Lämna in en modul (my_sequence_library.py) som fungerar med testprogrammet ovan. Den måste då innehålla klasserna ArithmeticSequence, GeometricSequence och MultiplicativeSequenceFromFile.

    Krav: Du ska ha felhantering. Exempelvis hantera att filen inte finns, att talföljden (från fil) inte har tillräckligt många element. Exempelvis om den innehållet data för 12 månader, då finns inte a[20].

    Extrauppgift

    Denna uppgift är för extra utmaning och behöver inte lämnas in.

    Implementera __setitem__ för MultiplicativeSequenceFromFile för att sätta värden. När värdena sätts ska respektive qq-värde beräknas från föregående värde. Lägg till en metod .save(filename) som sparar alla qq-värden till en fil som kan läsas in med MultiplicativeSequenceFromFile nästa körning.

    1601589599 10/01/2020 11:59pm
    Ytterligare kommentarer:
    Maxresultat för gradering till > poäng

    Matris

     
     
     
     
     
     
     
         
    Det går inte att ändra en matris efter att du börjat använda den.  
    Hitta en matris
    Hitta matris
    Titel
    Du har redan bedömt studenter med den här matrisen. Större ändringar kan påverka resultaten för deras uppgifter.
    Titel
    Kriterier Bedömningar Poäng
    Redigera beskrivning av kriterium Ta bort kriterium rad
    Det här kriteriet är länkat till ett lärandemål Beskrivning av kriterium
    tröskel: 5 poäng
    Redigera ranking Radera ranking
    5 till >0 poäng
    Full poäng
    blank
    Redigera ranking Radera ranking
    0 till >0 poäng
    Inga poäng
    blank_2
    Det här området kommer användas av utvärderaren för kommentarer relaterade till det här kriteriet.
    poäng
      / 5 poäng
    --
    Ytterligare kommentarer
    Poängsumma: 5 av 5