Isomeren zijn stoffen die gelijk zijn in de zin dat ze hetzelfde aantal en dezelfde soort atomen bevatten, maar die van elkaar verschillen door de wijze waarop die atomen onderling verbonden of geschikt zijn. Anders gezegd, isomeren zijn stoffen met dezelfde molecuulformule1 maar met een andere structuurformule2 (een stof is een isomeer met zichzelf). De chemische eigenschappen van isomeren zijn doorgaans verschillend.
Ethanol (een alcohol) en dimethylether bestaan bijvoorbeeld elk uit 6 waterstofatomen, twee koolstofatomen, en een zuurstofatoom. Enkel de volgorde van de bindingen is verschillend. Ze hebben bijgevolg dezelfde molecuulformule ($$\text{C}_2\text{H}_6\text{O}$$) maar een verschillende structuurformule.
Er bestaan verschillende standaarden die de structuurformule van een stof als een string voorstellen. Je mag ervan uitgaan dat de atomen in die stringvoorstelling symbolisch benoemd worden door een hoofdletter, eventueel gevolgd door een aantal kleine letters. Het verschil tussen hoofd- en kleine letters is hierbij belangrijk: de string PB staat bijvoorbeeld voor één atoom fosfor (P) en één atoom boor (B), terwijl de string Pb staat voor één atoom lood. Voorts kunnen tussen de symbolische namen van verschillende atomen ook nog andere karakters voorkomen, bijvoorbeeld Na-OH of (CHHH)CO(CHHH). Tussen de hoofdletter en de kleine letters van de symbolische naam van eenzelfde atoom komen echter nooit andere karakters voor.
Schrijf een functie molecuulformule waaraan de stringvoorstelling van een structuurformule van een bepaalde stof (str) moet doorgegeven worden. De functie moet een dictionary (dict) teruggeven, waarvan de sleutels bestaan uit de symbolische namen (str) van alle atomen uit de gegeven structuurformule. De waarde die correspondeert met een sleutel geeft telkens aan hoeveel keer het atoom in de formule voorkomt. Voor de gegeven string (CHHH)CO(CHHH) moet de functie dan bijvoorbeeld de dictionary {'H': 6, 'C': 3, 'O': 1} teruggeven. Merk op dat deze dictionary dus eigenlijk een voorstelling is van de molecuulformule die correspondeert met de gegeven structuurformule, vandaar de naam van de functie.
Gebruik de functie molecuulformule om een functie isomeren te schrijven. Aan de functie moeten twee stringvoorstellingen van structuurformules (str) doorgegeven worden. De functie moet een Booleaanse waarde (bool) teruggeven die aangeeft of de stoffen die overeenkomen met de gegeven structuurformules isomeren zijn.
>>> structuurformule1 = 'OCaOSeOO'
>>> structuurformule2 = 'HHCHHCHHCHHCHH'
>>> structuurformule3 = 'HHCHHHCCHHHCHH'
>>> molecuulformule(structuurformule1)
{'Ca': 1, 'Se': 1, 'O': 4}
>>> molecuulformule(structuurformule2)
{'H': 10, 'C': 4}
>>> molecuulformule(structuurformule3)
{'C': 4, 'H': 10}
>>> isomeren(structuurformule1, structuurformule2)
False
>>> isomeren(structuurformule1, structuurformule3)
False
>>> isomeren(structuurformule2, structuurformule3)
True