====== Différentes utilisation de Python =======
**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}$$
===== Python comme calculatrice =====
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
===== Mode progamme, programme à usage unique =====
Supposons que je veuille garder une trace de mon calcul, je peux l'enregistrer dans un programme.
==== Solution naïve, ne fonctionne pas ====
# 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.
==== Affichage explicite ====
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.
==== Mauvaise idée : les commentaires ====
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.
==== Utiliser des variables bien nommées ====
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%%''.
===== Mode programme, programme réutilisable =====
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.
=== Première réponse ===
# 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.
===== Programme intégré =====
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** !
- lecture des données,
- calcul de l'imc en fonction des données,
- affichage du résultat.
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.