IMC = Indice de Masse Corporelle. C'est une grandeur à usage des médecins et des diététiciens et qui permet d'évaluer, grossièrement, la corpulence d'une personne. En fonction de la valeur de l'IMC on pourra se faire une première idée de la situation d'une personne. Son poids est-il normal pour sa taille ? Le calcul est : $$IMC = \frac{\text{poids en kg}}{(\text{taille en m})^2}$$
Je souhaite calculer mon IMC. Je mesure 1 m 80, je pèse 80 kg. Je vais faire le calcul avec Python, un peu comme si j'utilisais une calculatrice.
>>> 80 / 1.8**2 24.691358024691358
Supposons que je veuille garder une trace de mon calcul, je peux l'enregistrer dans un programme.
# imc.py 80 / 1.8**2
En effet, je vous rappelle qu'en mode programme, le résultat d'un calcul ne s'affiche que si on le demande explicitement. Donc le résultat de 80/1.8**2 ne s'affichera pas.
On a donc l'idée d'ajouter la demande d'affichage :
# calcul de mon imc print(80 / 1.8**2)
Cette fois cela fonctionne, mais le programme est très peu lisible. On ne sait pas à quoi correspondent 80 et 1.8 par exemple.
La première idée serait de remplir le programme de commentaires :
# imc.py # Je mesure 1.8 m et je pèse 80 kg # je calcule l'imc qui vaut taille/poids**2 print(80 / 1.8**2)
C'est bien de commenter mais pas n'importe comment. Les commentaires ne doivent pas servir à traduire un programme mal fichu. C'est une mauvaise idée.
taille = 1.8 poids = 80 imc = taille / poids**2 print(imc)
Voilà, nous avons obtenu un programme qui fait ce qu'on lui demande et qui est très lisible. On n'aura aucun mal à se rappeler ce que représentent les différents éléments même si on y revient 6 mois plus tard.
Il est indispensable de choisir des noms explicites pour les variables. Si une variable contient un poids, on l'appelle poids, ou a la limite p si c'est assez clair dans la situation, mais certainement pas x.
Je souhaite maintenant pouvoir réutiliser mon programme et même le diffuser à d'autres. Dans ce cas, un programme qui calcule toujours le même IMC n'a pas grand intérêt. Je veux un programme qui, au moment de l'utilisation, demande les grandeurs utiles et calcule le résultat correspondant.
# imc.py réutilisable
taille = float(input("Votre taille ? "))
poids = float(input("Votre poids ? "))
imc = taille / poids**2
print(imc)
input permet de poser une question à l'utilisateur. Le programme s'arrête en attendant la réponse. Mais Python considèrera toujours la réponse comme du texte, même si on écrit un nombre. float permet d'indiquer que l'on veut que la réponse soit interprétée comme un nombre à virgule.
Comme on le verra un peu plus loin dans le cours, il est préférable d'organiser le code avec des fonctions. Cette partie prend donc un peu d'avance.
La solution est tout à fait juste mais elle a un défaut : On a l'impression que le programme ne fait qu'une chose, calculer l'imc, mais en vérité il en fait trois !
Ici les 3 fonctions du programme sont plus ou moins confondues. Pourtant elles sont très différentes. La 1 et la 3 relève de l'interface homme - machine (IHM). Si nous voulions que notre calcul s'intègre dans un projet plus vaste, avec une interface graphique plus élégante, il faudrait plus clairement séparer les éléments.
Par exemple, supposons que ma mission est simplement de fournir de quoi calculer l'IMC. Ce sont d'autres membres de l'équipe qui s'occupent de fabriquer de beaux menus, de belles interfaces.
# imc.py intégré
def calc_imc(taille, poids):
"""
taille: taille de l'individu en m
poids: poids de l'individu en kg
renvoi l'imc
"""
imc = poids / taille**2
return imc
Mon programme apparaît alors comme un simple module qui sera intégré dans un projet plus grand. Les autres membres de l'équipe n'auront qu'à écrire from imc import calc_imc, ce qui signifie : depuis le fichier imc.py, importer la fonction calc_imc. Ils pourront alors l'utiliser.