Laboration 7 - MolekylgrafikDet här programmet ska fullborda det som den föregående labben har påbörjat. Det gör formelkoll som tidigare och ritar sedan upp molekylen. I terminalfönstretkan det se ut så här (användarens inmatning i fetstil): Molekyl: Si(C3(COOH)2)4(H2O)7 Molekyl:och i molekylfönstret ritar programmet ut formelstrukturen: ![]() Bygg ett molekylträdDu ska komplettera formelkollsprogrammet till att samtidigt bygga ett träd som ser ut som ovan. Varje ruta motsvaras av ett objekt:class Ruta: def __init__(self, atom="( )", num=1): self.atom = atom self.num = num self.next = None self.down = NoneFunktionen readgroup skapar först en sådan tomruta med
rutan = Ruta() och anropar readatom och
readnum för att kunna sätta in rätt värden på atom
och num . Om det är en parentesgrupp ska readgroup s
anrop till readmol returnera en delmolekyl som sätts under
rutan.down .
När mol = readgroup()som görs allra först i readmol . Vad som ska göras med
mol.next får du själv tänka ut. Slutligen returnerar
readmol den färdiga strukturen till readformel
som returnerar den till huvudprogrammets anrop
mol = readformel()där mol pekar högst upp till vänster på syntaxträdet.
Rita molekylträdetHuvudprogrammet ska nu rita upp den färdiga molekylen. Använd molgrafik.py från labb 5. Skapa ett objekt av den klassen:mg=molgrafik() .
Sedan ska
mg.show(mol)rita upp molekylbilden i ett eget fönster. Bilden ritas förstås rekursivt, och du ska formulera den rekursiva tanke som används. Om du inte kommer på den själv kanske det hjälper att kolla molgrafikkoden. 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 formler. MolekylviktenMolekylvikten kan beräknas rekursivt med anropetweight(mol) .
Formulera först en mycket rekursiv tanke för vikten och programmera den sedan!
Låt programmet skriva ut vikten av molekylen i terminalfönstret.
Frivillig extrauppgiftModifiera molgrafiken så att vikten skrivs ut i samma fönster.Boka tid för redovisning av labb 6 och 7. Lysande löst av................................. fastslår............................ den ...............Glöm inte att fylla i kursenkäten på http://www.csc.kth.se/DD1320/tilda12/kursenkat/ |