Skapa lista

By . Latest revision .

Vi ska skapa en egen datastruktur, en “unordered list”.

#Förkunskaper

Du har läst artikeln “Exceptions”.
Du har läst artikeln “Datastrukturer”.
Du har gjort uppgiften “Skapa kö”.

#Unordered list

Vi ska skapa en egen datastruktur, en “Unordered list”, som en klass. Unordered list kan liknas vid en vanlig lista i Python. Det ska gå att lagra element i den. En representation av en unordered list kan se ut såhär:

Nedanför ser vi ett klassdiagram för en UnorderedList klass. Under diagrammet beskrivs varje metod. Diagrammet ska uppfyllas av er implementation.

klassdiagram för UnorderedList

klassdiagram för UnorderedList

  • __init__: Skapa en tom lista.
  • append: Lägg till nytt element/nod sist i listan.
  • set: Skriv över element med ny data som finns på index. Om index inte finns lyft MissingIndex exception.
  • size: Returnera antalet element i listan. En tom lista har storleken 0.
  • get: Returnera värde på index. Om index inte finns lyft MissingIndex exception.
  • index_of: Om data finns i listan returnera dess index. Om värdet inte finns lyft MissingValue exception.
  • print_list: Skriv ut listans innehåll.
  • remove: Ta bort nod med samma data. Om värdet inte finns lyft MissingValue exception. Om det finns flera noder med värdet, ta bara bort första.

TIPS skapa append och get tidigt, de behövs för testerna.

#Krav

Alla kraven är för de som jobbar i grupp och ensamma. Det är inga specifika krav för de som jobbar i grupp.

Ställ dig i mappen list/.

# Ställ dig i kurskatalogen
cd me/kmom04/list
mkdir src tests
  1. Skapa en fil med namnet src/node.py. Kopiera koden för en Node och klistra in i node.py filen.

  2. Skapa en fil med namnet src/unorderedlist.py. Den ska innehålla klassen UnorderedList.

  3. UnorderedList klassen ska följa klassdiagrammet ovanför. Minst de metoderna och attributen måste finnas i din implementation. Det är Ok att lägga till mer.

  4. Implementera UnorderedList med noder för att bygga listan.

  5. Välj själv om listan ska vara cirkulär, dubbellänkad eller enkellänkad.

  6. Skapa filen src/errors.py i “list” mappen. Den ska innehålla 2 egna exceptions. Använd dig av dem i UnorderedList klassen. Skapa MissingValue och MissingIndex.

  7. Skapa filen main.py i “list” mappen. Den ska innehålla en klass med namnet Handler, den ska innehålla metoden main (tänk marvin i python kursen). Klassens konstruktor ska inte ta några argument (utom self), i konstruktorn skapas en tom UnorderedList och tilldelas till instans attributet self.list. Menyn i loopen ska ha följande menyval:

    1. Tar ett input() värde och använder append för att lägga till värdet sist i listan.
    2. Tar ett input() värde som index och använder get() för att hämta värdet på det index. Skriv ut värdet. Om indexet inte finns ska det skrivas ut Missing index.
    3. Skriv ut hur många element som finns i listan, använd size().
    4. Använder ett input()anrop för att ta två värden, i formatet "index, value". Använder set() för att skriva över ett värde i listan. Om indexet inte finns ska det skrivas ut Missing index.
    5. Använd print_list() för att skriva ut alla värden i listan.
    6. Tar ett input() värde och använder index_of() för att hämta och skriva ut index för det inmatade värdet. Om värdet inte finns ska det skrivas ut Missing value.
    7. Tar ett input() värde och använder remove() för att ta bort det värdet från listan. Om värdet inte finns ska det skrivas ut Missing value.
      q. Avsluta programmet.
  8. Skapa en fil med namnet test.py som kör testerna ni lägger i tests/. Skriv enhetstester för metoderna i UnorderedList klassen. Det ska finnas tester för metoderna, get, index_of och remove. Kolla på Testa exceptions för att se hur man fångar exceptions i ett test.

# Ställ dig i kurskatalogen
#dbwebb validate list
dbwebb publish list

Rätta eventuella fel som dyker upp och validera igen. När det ser grönt ut så är du klar.

#Extrauppgift

  1. Implementera den magiska metoden len för din UnorderedList. Gör så len(list) fungerar.

  2. Implementera den magiska metoden str för din UnorderedList. Gör så print(list) och str(list) fungerar.

  3. Implementera den magiska metoden getitem för din UnorderedList. Gör så list[0] fungerar.

  4. Implementera den magiska metoden setitem för din UnorderedList. Gör så list[0] = 4 fungerar.

#Tips från coachen

Validera ofta. Så slipper du en massa valideringsfel i slutet av övningen.

Lycka till och hojta till i forumet om du behöver hjälp!

#Revision history

  • 2022-02-04: (G, aar) Minskade storlek och definierade hur menyn ska fungera.
  • 2020-02-04: (F, aar) Minskade storlek för VT20.
  • 2019-02-15: (E, aar) Ändrade test kravet, ska testa insert istället för add.
  • 2019-02-13: (D, aar) Uppdaterade klassdiagram och metod förklaringar.
  • 2019-01-25: (C, aar) Formulerade om test kravet.
  • 2018-01-26: (B, aar) Added requirements.
  • 2018-01-25: (A, lew) First version.

Document source.

Category: oopython.