Table des matières

Reconnaître une espèce chimique

Un alcane

Un alcane est une molécule composée de carbone et d'hydrogène. Le méthane, le propane, le butane sont des alcanes.

Par exemple, le butane a pour composition C4H10, soit 4 atomes carbone et 10 atomes hydrogène. En général, si $n$ est le nombre d'atomes carbone, le nombre d'atomes hydrogène est $2n+2$.

À faire : Écrire une fonction est_alcane(formule) qui pour une formule donnée sous forme de texte, par exemple "C4H10" renvoie True ou False, selon si c'est un alcane ou non.

L'usage est de ne pas écrire le 1 quand il n'y a qu'un seul atome. Par exemple "CH4" pour le méthane ou "CO2" pour le dioxyde de carbone.

Tests

Ajoutez les tests suivants à la suite de la fonction :

# tests
assert est_alcane("C") == False
assert est_alcane("C2") == False
assert est_alcane("CH4") == True
assert est_alcane("C2H6") == True
assert est_alcane("C3H8") == True
assert est_alcane("C15H32") == True
assert est_alcane("C15H62") == False
assert est_alcane("CO2") == False
assert est_alcane("CuB7C15Na3") == False
assert est_alcane("4C10H") == False

Alcool

Vous pouvez vérifier une structure plus complexe qui précise l'organisation de la molécule. Par exemple, on note les alcools sous cette forme CH3-CH2-CH2-OH pour le propanol.

À faire : écrire une fonction est_alcool(formule).

Pour aller plus loin

Découper une chaîne caractère après caractères est fastidieux et peu performant. L'informatique propose une théorie des langages qui étudie la capacité à reconnaître certains motifs. [Noam Chomsky](https://fr.wikipedia.org/wiki/Noam_Chomsky) a grandement contribué à cette théorie. Une application : les expressions régulières.

Voici un exemple pour le cas précédent :

import re # expressions régulières

def decomposeFormule(formule):
    regex = "([A-Z][a-z]*)([0-9]*)"
    return re.findall(regex, formule)

On obtient un découpage parfait même pour des formules comme "Cu12N3HB". La suite du travail en est grandement facilitée.