Laboration 5 - Atomvikter
Ditt program ska bygga upp en hashtabell över alla grundämnens
beteckningar och atomvikter så att det supersnabbt kan söka önskad
information. Dialogen blir så här:
Atombeteckning: Ag
107.8682
Atombeteckning: Au
196.966569
Atombeteckning: Q
Okänd atom
Atombeteckning:
Du ska göra tre versioner av programmet:
- Använd Pythons inbyggda datastruktur dictionary som hashtabell.
- Implementera en egen hashtabell.
- Lägg till ett grafiskt gränssnitt.
Hashning med Pythons inbyggda dictionary
Skriv en klass Hashtabell som använder dictionary. Den ska ha
metoderna put
och get
.
Programmet hashtest.py (se tabellen till höger) innehåller data
om alla atomer (namn och atomvikt). Lista ut vad det gör och
hur det anropar hashtabellen. Modifiera det sedan
för att kontrollera om din hashtabell fungerar.
Skriv sedan ett huvudprogram labb5.py
där man kan ge ett atomnamn
och få ut atomvikten, enligt dialogexemplet ovan.
En egen hashtabell
Nu ska du göra en ny version av klassen Hashtabell (spara den i en ny fil)
där du använder en Python-lista för att implementera en egen hashtabell.
Krav:
- Noderna måste innehålla både nyckel och värde
- Hashtabellen ska vara lagom stor
- Någon krockhantering måste ingå, t ex krocklistor eller probning
- Använd
KeyError
för att tala om att en nyckel inte finns
- Skriv en egen hashfunktion (Pythons inbyggda
hash()
räcker inte)
- Ska klara testning med hashtest.py ovan
Låt nu labb5.py använda din egen hashtabell!
Testa med mer data
Är din Hashtabell-klass flexibel? I programmet storfil.py används
en dictionary för att lagra en miljon artister och sånger. Provkör med din
hashtabell och se att det fungerar.
Grafiken
För att få till grafiken i labb5.py importerar du klasserna
Molgrafik och Ruta från filen molgrafik.py.
Börja med att skapa ett Molgrafik-objekt;
mg = Molgrafik()
Klassen Ruta har fyra attribut:
atom
där du kan lägga in atomens namn
num
där du kan lägga in atomens vikt
next
och down
som du kan strunta i för denna labb
(dom används i labb 7).
Gör ett objekt r
av Ruta
och
använd sedan metoden show
så här:
mg.show(r)
Om programmet avslutas direkt hinner man inte se grafiken blinka förbi.
Lägg en slinga runt huvudprogrammet för inmatning av flera atomer.
PS Provkör gärna programmet i ett Terminalfönster för att undvika
ev problem med IDLE.
Redovisning
Kontrollera att du gjort alla uppgifterna ovan.
Vid redovisningen ska du även kunna
- motivera ditt val av hashfunktion, krockhantering och tabellstorlek,
- skissa hashtabellen,
- förklara varför hashning ger snabb sökning,
Lysande genomfört av................................. menar............................ den ...............