De atomaire samenstelling van een molecuul wordt weergegeven met een molecuulformule. Een dergelijke molecuulformule geeft het aantal atomen aan van elk element dat in het molecuul voorkomt. De elementen hebben symbolen die bestaan uit één hoofdletter, eventueel gevolgd door één of twee kleine letters. Het juiste gebruik van hoofdletters en kleine letters is van groot belang: Pb geeft het element lood aan terwijl PB staat voor een verbinding van fosfor en boor. Het is gebruikelijk dat de elementen C, H, N, O en S als eerste genoemd worden, gevolgd door de overige elementen in alfabetische volgorde. Dit is bijvoorbeeld te zien bij de molecuulformule van mosterdgas (C$$_\text{4}$$H$$_\text{8}$$SCl$$_\text{2}$$). Onderstaande tabel bevat enkele voorbeelden van molecuulformules.

naam molecuulformule
water H$$_\text{2}$$O
koolstofdioxide CO$$_\text{2}$$
ethanol C$$_\text{2}$$H$$_\text{5}$$OH
boterzuur C$$_\text{4}$$H$$_\text{8}$$O$$_\text{2}$$
guanosinetrifosfaat C$$_\text{10}$$H$$_\text{16}$$N$$_\text{5}$$O$$_\text{14}$$P$$_\text{3}$$

De molecuulmassa (of moleculaire massa) van een stof is de massa van één molecuul van die stof, uitgedrukt in atomaire massa-eenheden (u). Deze molecuulmassa kan makkelijk berekend worden als de som van de atoommassa's van de afzonderlijke atomen waaruit het molecuul is opgebouwd. Om bijvoorbeeld de molecuulmassa van water (H$$_\text{2}$$O) te berekenen, wordt de som genomen van de massa's van de atomen waaruit een molecuul water bestaat. Het periodiek systeem der elementen leert ons dat de atoommassa van waterstof en zuurstof respectievelijk gelijk is aan $$1,00794\,\text{u}$$ en $$15,9994\,\text{u}$$. De moleculaire massa van water is dus $$2 \times 1,00794\,\text{u} + 15,9994\,\text{u} = 18,01528\,\text{u}$$.

Opgave

Gegeven is een tekstbestand periodiek_systeem.txt1, dat een lijst met informatie over de elementen uit het periodiek systeem bevat. Elke regel — behalve de eerste die als hoofding geldt — bevat de volgende informatie over een element: i) atoomnummer, ii) symbolische voorstelling, iii) Engelstalige naam, iv) Nederlandstalige naam, en v) atoommassa. De informatievelden worden van elkaar gescheiden door een tab. Gevraagd wordt:

  1. Schrijf een functie atoommassa waaraan de locatie van het tekstbestand periodiek_systeem.txt2 moet doorgegeven worden. De functie moet een dictionary als resultaat teruggeven, die de symbolische voorstelling van de elementen als sleutels gebruikt, en de atoommassa als corresponderende waarde.

  2. Schrijf een functie molecuulmassa die de molecuulmassa teruggeeft voor een gegeven molecuulformule. Naast de molecuulformule zelf, moet nog een tweede argument aan de functie doorgegeven worden: een dictionary die de symbolische voorstelling van de elementen uit het periodiek systeem als sleutel gebruikt en koppelt aan hun atoommassa. Voor de eenvoud worden de verschillende elementen in een molecuulformule van elkaar gescheiden door een koppelteken (-). Zo wordt de formule voor zwavelzuur (H$$_\text{2}$$SO$$_\text{4}$$) weergegeven als de string H2-S-O4. De molecuulmassa van zwavelzuur kan dan berekend worden als \[\begin{eqnarray*} \text{molecuulmassa(}\text{H}_\text{2}\text{SO}_\text{4}\text{)}&=& 2\times\text{atoommassa(}\text{H}\text{)} + \text{atoommassa(}\text{S}\text{)} + 4\times\text{atoommassa(}\text{O}\text{)}\\ &=&2\times1,00794\,\text{u}+32,066\,\text{u}+4\times15,9994\,\text{u}\\ &=&98,07948\,\text{u} \end{eqnarray*}\] De functie moet de reële waarde -1 teruggeven indien de gegeven molecuulformule de symbolische voorstelling van een element bevat dat niet wordt teruggevonden in de gegeven dictionary.

Voorbeeld

In onderstaande interactieve sessie gaan we ervan uit dat het tekstbestand periodiek_systeem.txt3 zich in de huidige directory bevindt.

>>> index = atoommassa('periodiek_systeem.txt')
>>> index['Si']
28.0855
>>> molecuulmassa('H2-S-O4', index)
98.07948