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”.

#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

  • is_empty: Returnera True/False för om listan är tom eller inte.
  • add: Lägg till nytt element/nod sist i listan.
  • insert: Lägg till nytt element/nod på specifikt index. Om index inte finns lyft exception.
  • set: Skriv över element med ny data som finns på index. Om index inte finns lyft exception.
  • size: Returnera antaler element i listan.
  • get: Returnera värde på index. Om index inte finns lyft exception.
  • index_of: Om data finns i listan returnera dess index. Om nod med data inte finns lyft exception.
  • print_list: Skriv ut listans innehåll.
  • remove: Ta bort nod med samma data. Om nod med data inte finns lyft exception.

#Krav

Ställ dig i mappen list/.

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

  2. Skapa en fil med namnet unorderedlist.py i “list” mappen. 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 errors.py i “list” mappen. Den ska innehålla minst 2 egna exceptions. Använd dig av dem i UnorderedList klassen. T.ex. ett för Value error och ett för Index error. Skriv i redovisningstexten vilka det är och hur man får dem.

  7. Skapa filen main.py i “list” mappen. Den ska innehålla en handler klass med en evighets loop (tänk marvin i python kursen). I loopen ska det finnas input alternativ för alla metoder i UnorderedList klassen.

  8. Skapa en fil med namnet test.py i “list” mappen. Skriv enhetstester för metoderna i UnorderedList klassen. Det ska finnas tester för metoderna, insert, set, 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

  • 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.