Cela faisait quelques temps que je m’intéressais à Python par curiosité et envie d’apprendre quelque chose de nouveau, et cela me permettra d’ajouter une corde à mon arc car à la différence de Powershell, Python fonctionne sur un grand nombre de systèmes d’exploitation. Ce qu’il me manquait pour commencer Python, c’était réellement un besoin, une idée, quelque chose que je pouvais faire avec un autre langage mais pour laquelle il n’y avait aucun enjeu à ce que je prenne plus de temps où qu’elle soit faite dans un autre langage. J’ai finalement trouvé l’inspiration pour un premier bout de code en Python grâce à la table périodique des éléments.
J’ai donc développé mes 2 premiers scripts Python sur ce thème. Le premier demande à l’utilisateur de saisir un symbole de cette table pour lui retourner l’élément correspondant ainsi que son numéro atomique :
import csv
eleminput = input("Enter a symbol:")
with open('PubChemElements_all.csv', newline='') as tablecsv:
pertbl = csv.reader(tablecsv,delimiter=',')
for row in pertbl:
elemread = row[0]
if elemread == eleminput:
print(elemread + " is " + row[1] + " and is atomic number " + row[2])
La manière d’ouvrir le fichier CSV est un peu déroutante au départ. En Powershell, la commande Import-CSV permet de le faire en une ligne. Ici, il est nécessaire d’appeler le fichier dans une variable puis d’instancier un objet depuis la classe csv. Le reste est plutôt logique et l’on adresse chaque élément de la ligne parcourue ici nommée row comme un tableau dont l’index commence par 0, comme en .NET.
Le deuxième est un peu plus complexe car il s’agit d’un « jeu » : Python choisit au hasard un élément parmi la liste et expose le nom de cet élément à l’utilisateur qui doit en deviner le symbole :
import csv
import random
randelem = random.randint(1, 118)
with open('PubChemElements_all.csv', newline='') as tablecsv:
pertbl = csv.reader(tablecsv,delimiter=',')
for row in pertbl:
if pertbl.line_num == randelem:
elemsym = row[0]
elemname = row[1]
eleminput = input("Please input the symbol for element " + elemname + " : ")
if eleminput == elemsym:
print("Well done! " + elemsym + " is the symbol for " + elemname)
else:
print("Sorry! " + elemname + " has " + elemsym + " as symbol")
Voici ce que cela donne :
J’ai donc importé le module random pour générer de manière aléatoire un nombre. Etant donné que mon fichier CSV comporte 118 éléments, je vais chercher un nombre allant de 1 à 118 – il est important de garder à l’esprit que les index commencent à zéro en Python mais ici cela n’a pas d’importance car je cherche à faire concorder cette valeur avec un nombre de lignes parcourues, et ce nombre ne peut pas être égal à zéro – et je parcours ensuite mon fichier CSV en comptant le nombre de lignes jusqu’à arriver au nombre choisi aléatoirement en début de code. Une fois que je tombe sur celui-ci, je stocke dans deux variables le symbole et le nom de l’élément, qui me permettront de faire la vérification de la réponse de l’utilisateur ainsi que l’affichage de l’élément à trouver.
J’ai joué ces scripts sur un environnement macOS Catalina avec Python 3.8. J’ai regroupé les deux scripts ainsi que le fichier CSV d’entrée dans un fichier au format zip téléchargeable directement depuis le miroir du blog.