PROG0154 - Molecular mass

no tags 

The atomic composition of a molecule is represented by a molecular formula. Such a molecular formula represents the number of atoms of each element that occurs in the molecule. The elements have symbols that consist of a single capital letter, optionally followed by one or two lower case letters. The proper use of upper and lower case is important: Pb gives the element lead while PB represents a compound of phosphorus and boron. It is common for the elements C, H, N, O and S to be listed first, followed by the other elements in alphabetical order. This is demonstrated in the molecular formula of mustard gas (C$_\text{4}$H$_\text{8}$SCl$_\text{2}$). The following table contains some examples of molecular formulas.

name molecular formula
water H$_\text{2}$O
carbon dioxide CO$_\text{2}$
ethanol C$_\text{2}$H$_\text{5}$OH
butyric acid C$_\text{4}$H$_\text{8}$O$_\text{2}$
guanosine triphosphate C$_\text{10}$H$_\text{16}$N$_\text{5}$O$_\text{14}$P$_\text{3}$

The molecular mass of a substance is the mass of a single molecule of the substance, expressed in atomic mass units (u). This molecular weight can be easily calculated as the sum of the atomic masses of the individual atoms of which the molecule is built up. For example, the molecular weight of water (H$_\text{2}$O) is the sum of the masses of the atoms of which a water molecule consists. The periodic table of elements shows that the atomic mass of hydrogen and oxygen, respectively, is equal to $1,00794\,\text{u}$ en $15,9994\,\text{u}$. The molecular mass of water is$2 \times 1,00794\,\text{u} + 15,9994\,\text{u} = 18,01528\,\text{u}$.

Assignment

Given is a text file periodic_system.txt, which contains a list with information about the elements in the periodic table. Each line - except for the first one which is used as a header - includes the following information about an element: i) atomic number, ii) symbolic representation, iii) English name, iv) Dutch name, and v) atomic mass. The information fields are separated by a tab. Asked:

  1. Write a function atomicmass that takes the location of the text file periodic_system.txt as its argument. The function must return a dictionary as a result, which uses the symbolic representation of the elements as keys, and the atomic mass as the corresponding value.
  2. Write a function molecularmass, which returns the molecular mass for a given molecular formula. In addition to the molecular formula itself, a second argument must be passed to the function: a dictionary that uses the symbolic representation of the elements of the periodic table as a key and links to their atomic mass. For simplicity, the various elements in a molecular formula are separated by a hyphen (-). For example, the formula for sulfuric acid is (H$_\text{2}$SO$_\text{4}$) displayed as the string H2-S-O4. The molecular mass of sulfuric acid can then be calculated as $$\begin{eqnarray*}
    \text{molecularmass(}\text{H}_\text{2}\text{SO}_\text{4}\text{)}&=& 2\times\text{atomicmass(}\text{H}\text{)} + \text{atomicmass(}\text{S}\text{)} + 4\times\text{atomicmass(}\text{O}\text{)}\\
    &=&2\times1,00794\,\text{u}+32,066\,\text{u}+4\times15,9994\,\text{u}\\
    &=&98,07948\,\text{u}
    \end{eqnarray*}$$ The function should return the real value -1 if the given molecular formula contains the symbolic representation of an element which is not found in the given dictionary.

Example

In the following interactive session we assume that the text file periodic_system.txt is located in the current directory.

>>> index = atomicmass('periodic_system.txt')
>>> index['Si']
28.0855
>>> molecularmass('H2-S-O4', index)
98.07948

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.txt, 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.txt 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.txt zich in de huidige directory bevindt.

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


Added by:Peter Dawyndt
Date:2011-08-28
Time limit:5s
Source limit:50000B
Memory limit:1536MB
Cluster: Cube (Intel G860)
Languages:PY_NBC
Resource:None