Interaction simple

En guise de premier exemple, nous allons concevoir un script qui calcule l'Indice de Masse Corporelle (IMC) d'un individu à partir d'informations qu'il aura saisies au clavier.

L'IMC est calculé à partir du rapport du poids (en kg) par le carré de la taille (en m).

Saisie clavier

La fonction input() retourne, sous la forme d'une chaîne de caractères, le texte saisi au clavier.

# input.py
firstname = input("Quel est votre prénom ? ")
print("Bonjour " + firstname + " !")

Le script ci-dessus produit le résultat suivant :

Quel est votre prénom ? Olivier
Bonjour Olivier !

Calcul de l'Indice de Masse Corporelle (IMC)

De façon à reproduire le résultat ci-dessous, vous utiliserez la fonction input() associée à la fonction print(). Vous pourrez avoir recours aux caractères spéciaux au sein des chaînes de caractère à afficher.

Caractère Description
\n Retour à la ligne
\t Tabulation
\" Guillemet, pour ne pas le confondre avec ceux utilisés pour délimiter la chaîne de caractères

################################################
#                                              #
# Calcul de l'indice de masse corporelle (IMC) #
#                                              #
################################################


Votre poids (en kg) ? 84
Votre taille (en m) ? 1.86

IMC = 24.28

Exercice

Écrivez un script Python imc.py qui calcule l'IMC. Vous créerez deux variables de type décimal weight et height pour stocker les valeurs saisies par l'utilisateur (pensez au transtypage pour l'affichage).

Correction
# Calcul de l'indice de masse corporelle
# IMC = poids/hauteur^2

print("\n\n")
print("################################################")
print("#                                              #")
print("# Calcul de l'indice de masse corporelle (IMC) #")
print("#                                              #")
print("################################################")
print("\n")

weight = float(input("Votre poids (en kg) ? "))
height = float(input("Votre taille (en m) ? "))

imc = weight/(height*height)
print("\nIMC = " + str(imc))

On désire enrichir ce premier script en affichant, en plus de la valeur de l'IMC, un commentaire basé sur les intervalles ci-dessous :

Intervalle Diagnostic
IMC ≤ 16.5 Dénutrition ou anoréxie
16.5 < IMC ≤ 18.5 Maigreur
18.5 < IMC ≤ 25 Corpulence normale
25 < IMC ≤ 30 Surpoids
30 < IMC ≤ 35 Obésité modérée
35 < IMC ≤ 40 Obésité sévère
IMC > 40 Obésité morbide

################################################
#                                              #
# Calcul de l'indice de masse corporelle (IMC) #
#                                              #
################################################


Votre poids (en kg) ? 84
Votre taille (en m) ? 1.86

IMC = 24.28
corpulence normale

Exercice

Modifiez le script Python imc.py afin de tester la valeur de l'IMC pour afficher le commentaire approprié.

Correction
# Calcul de l'indice de masse corporelle
# IMC = poids/hauteur^2

print("\n\n")
print("################################################")
print("#                                              #")
print("# Calcul de l'indice de masse corporelle (IMC) #")
print("#                                              #")
print("################################################")
print("\n")

weight = float(input("Votre poids (en kg) ? "))
height = float(input("Votre taille (en m) ? "))

imc = weight/(height*height)
print("\nIMC = " + str(imc))

interpretation = "dénutrition ou anoréxie"
if (imc>16.5) and (imc<=18.5):
    interpretation = "maigreur"
if (imc>18.5) and (imc<=25):
    interpretation = "corpulence normale"
if (imc>25) and (imc<=30):
    interpretation = "surpoids"
if (imc>30) and (imc<=35):
    interpretation = "obésité modérée"
if (imc>35) and (imc<=40):
    interpretation = "obésité sévère"
if imc>40:
    interpretation = "obésité morbide"

print(interpretation) 

Pour finir, on souhaite ajouter une dernière modification au script imc.py : le script interroge l'utilisateur s'il désire effectuer un nouveau calcul d'IMC avec d'autres valeurs. Tant que l'utilisateur ne répond pas non, le script boucle.


################################################
#                                              #
# Calcul de l'indice de masse corporelle (IMC) #
#                                              #
################################################


Votre poids (en kg) ? 84
Votre taille (en m) ? 1.86

IMC = 24.28
corpulence normale

Voulez-vous continuer [O/N] ?

Cette modification est le prétexte pour introduire une autre clause pour créer une boucle en Python : while permet de répéter un jeu d'insctructions tant qu'une condition est vraie. Par exemple :

# -*- coding: utf-8 -*-
#
# La première ligne du script permet de préciser
# l'encodage des caractères (ici utf-8), nécessaire
# pour l'utilisation de caractères accentués ou de
# la cédille dans cet exemple.

answer = "non"
while answer != "oui":
    answer = input("Ça va ? ")
print("Bonne nouvelle !")

Ce script produit le résultat suivant.

Ça va ? non
Ça va ? bof
Ça va ? oui
Bonne nouvelle !

Exercice

Apportez une dernière modification au script en proposant de continuer le calcul de l'IMC à l'aide de la clause while.

Correction
## Calcul de l'indice de masse corporelle v2
# IMC = poids/hauteur^2

yes = True
while yes:
    print("\n\n")
    print("################################################")
    print("#                                              #")
    print("# Calcul de l'indice de masse corporelle (IMC) #")
    print("#                                              #")
    print("################################################")
    print("\n\n")

    weight = float(input("Votre poids (en kg) ? "))
    height = float(input("Votre taille (en m) ? "))

    imc = weight/(height*height)
    print("\nIMC = " + str(imc))

    interpretation = "dénutrition ou anoréxie"
    if (imc>16.5) & (imc<=18.5):
        interpretation = "maigreur"
    if (imc>18.5) & (imc<=25):
        interpretation = "corpulence normale"
    if (imc>25) & (imc<=30):
        interpretation = "surpoids"
    if (imc>30) & (imc<=35):
        interpretation = "obésité modérée"
    if (imc>35) & (imc<=40):
        interpretation = "obésité sévère"
    if imc>40:
        interpretation = "obésité morbide"

    print(interpretation + "\n")

    answer = input("Voulez vous continuer [O/N] ?")
    if (answer == "n" or answer == "N"):
        yes = False

Félicitations, vous avez réalisé vos premiers scripts Python reposant sur une interaction simple (saisie clavier) avec l'utilisateur. Prêt à découvrir les techniques de chargement de fichiers de données ?