Laboration 5 - AtomvikterDitt program ska bygga upp en databas över alla grundämnens beteckningar och atomvikter så att det supersnabbt kan söka önskad information. I terminalfönstret ställs frågorna, t exAtombeteckning: Ag Atombeteckning: Au Atombeteckning: Q Atombeteckning:och i ett annat fönster skriver programmet ut informationen (dvs atomnamnet och atomvikten) överskådligt och tjusigt! Om atomen inte finns dyker felmeddelandet Okänd atom: Q upp i fönstret istället.
Du ska göra två versioner av programmet. Först löser du det med Pythons inbyggda datastruktur dictionary och sedan genom att själv implementera en hashtabell. Hashning med Pythons inbyggda dictionaryDatafilen atoms.dat består av rader av typenAg 107.868I den första varianten av programmet ska du läsa in filen i en dictionary atomlist med atombeteckningen
som nyckel och atomvikten som värde, alltså enligt principen
atomlist["Ag"] = 107.868Några tips:
GrafikenFör att få till grafiken importerar du klassen molgrafik från filen molgrafik.py och skapar en instans av den:mg = molgrafik() .
Dessutom behövs en klass Ruta (som du kan lägga överst i ditt program
eller i en egen fil som du importerar):
class Ruta: def __init__(self): self.atom = "( )" self.num = 1 self.next=None self.down=NoneDitt objekt mg kan visa rutor.
(Det ska du använda i laboration 7 också.)
Gör ett objekt r av Ruta och sätt attributet
atom till det du vill ska synas i grafikfönstret
(atomnamn och -vikt). Använd sedan metoden show så här:
mg.show(r)
Om programmet avslutas direkt hinner man inte se grafiken blinka förbi. Se därför till att ha en slinga för inmatning av flera atomer... Egen hashtabellI den andra versionen av programmet ska du byta ut Pythons inbyggda dictionary mot en egen hashtabell. På kursens webbsida kan du hämta ett programskelett hashtable.py att utgå från (men du måste inte använda det). Krockproblemet ska lösas med kvadratisk probning.
Hur stor bör hashvektorn vara? Konstruera ett objekt av klassen from hashtable import Hashtable ... atomtable = Hashtable(17) #...men sjutton är felGör en kopia av första versionen av programmet och använd din Hashtable :
hasha in alla atomer i atomtabellen med atomtable.put(...) ,
kolla om de finns där med atomtable.has_key(...)
och hämta innehållet med atomtable.get(...) .
Kör hashtest.py för att kontrollera om hashtabellen fungerar. Lysande genomfört av................................. menar............................ den ............... |