Skapa lista
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.
__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 lyftMissingIndex
exception.size
: Returnera antalet element i listan. En tom lista har storleken 0.get
: Returnera värde på index. Om index inte finns lyftMissingIndex
exception.index_of
: Om data finns i listan returnera dess index. Om värdet inte finns lyftMissingValue
exception.print_list
: Skriv ut listans innehåll.remove
: Ta bort nod med samma data. Om värdet inte finns lyftMissingValue
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
Skapa en fil med namnet
src/node.py
. Kopiera koden för en Node och klistra in i node.py filen.Skapa en fil med namnet
src/unorderedlist.py
. Den ska innehålla klassen UnorderedList.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.
Implementera UnorderedList med noder för att bygga listan.
Välj själv om listan ska vara cirkulär, dubbellänkad eller enkellänkad.
Skapa filen
src/errors.py
i “list” mappen. Den ska innehålla 2 egna exceptions. Använd dig av dem i UnorderedList klassen. SkapaMissingValue
ochMissingIndex
.Skapa filen
main.py
i “list” mappen. Den ska innehålla en klass med namnetHandler
, den ska innehålla metodenmain
(tänk marvin i python kursen). Klassens konstruktor ska inte ta några argument (utomself
), i konstruktorn skapas en tom UnorderedList och tilldelas till instans attributetself.list
. Menyn i loopen ska ha följande menyval:- Tar ett
input()
värde och använderappend
för att lägga till värdet sist i listan. - Tar ett
input()
värde som index och använderget()
för att hämta värdet på det index. Skriv ut värdet. Om indexet inte finns ska det skrivas utMissing index
. - Skriv ut hur många element som finns i listan, använd
size()
. - Använder ett
input()
anrop för att ta två värden, i formatet"index, value"
. Använderset()
för att skriva över ett värde i listan. Om indexet inte finns ska det skrivas utMissing index
. - Använd
print_list()
för att skriva ut alla värden i listan. - Tar ett
input()
värde och använderindex_of()
för att hämta och skriva ut index för det inmatade värdet. Om värdet inte finns ska det skrivas utMissing value
. - Tar ett
input()
värde och använderremove()
för att ta bort det värdet från listan. Om värdet inte finns ska det skrivas utMissing value
.
q
. Avsluta programmet.
- Tar ett
Skapa en fil med namnet
test.py
som kör testerna ni lägger itests/
. Skriv enhetstester för metoderna i UnorderedList klassen. Det ska finnas tester för metoderna,get
,index_of
ochremove
. 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
Implementera den magiska metoden len för din UnorderedList. Gör så
len(list)
fungerar.Implementera den magiska metoden str för din UnorderedList. Gör så
print(list)
ochstr(list)
fungerar.Implementera den magiska metoden getitem för din UnorderedList. Gör så
list[0]
fungerar.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.