401 : Python - Calculs - Tests
Pré-requis
Disposer d'un environnement de développement en python : T-0037 : PythonAnywhere
Affecter une variable
Afficher une variable : print()
Convertir une variable de type float en string : str ()
Votre dossier de travail pour stocker vos fichiers est app/fiab/
Question
N0, Nt et Rt sont les noms de variable à utiliser :
Affecter N0 à 1000
Affecter Nt à 490
Calculer Rt
Afficher Rt
Afficher le texte suivant : La fiabilité est de {Rt} % (voir ci-contre)

Solution
# code 401-1
N0 = 1000
Nt = 490
Rt = Nt/N0
print(Rt)
mess = "La fiabilité est de " + str(Rt*100) + " %"
print(mess)
Faire des tests (if else elif)
Tester la validité des données en ajoutant l'affichage d'une variable err si le trg n'est pas compris entre 0 et 1
tu = 103
to = 100
trg = tu/to
# on met la variable err à VRAI (true) si le trg n'est pas compris entre 0 et 1
err = not ((trg>=0) and (trg<=1))
print (err)
Faire des tests en modifiant les valeurs de tu et to pour vérifier que l'on affiche true ou false si il y a une incohérence
Avec un test sur la variable err, on affiche un message adapté à l'utilisateur. Il faut donc ajouter le code ci-dessous
if err :
print ("erreur : "+ "avec tu = "+str(tu)+ " hrs et to = "+str(to)+" hrs")
else :
print ("ok : le trg est de "+str(trg*100) +" % avec tu = "+str(tu)+ " hrs et to = "+str(to)+" hrs")
NOTER l'importance du : qui marque le début des blocs if et else
NOTER que chaque bloc est indenté avec la touche TAB pour que l'instruction à exécuter fasse bien partie du bloc.
Ci-contre, en cliquant sur les flèches des lignes 5 et 7, vous pouvez d'ailleurs replier les blocs pour être conscient du rôle joué par l'indentation.
« EN C/C++, on utilise les accolades {} pour marquer les débuts/fins de bloc ainsi que le ; pour marquer la fin d'une instruction »
« Python n'oblige pas déclarer les variables en préalable à une affectation »

Question
Vous pouvez continuer à travailler avec le même fichier .py en mettant le code que vous ne souhaitez plus exécuter avec des tripe cotes (''') en début et fin du code concerné
# est utilisé pour commenté une ligne (il peut donc être utilisé pour empêcher l'exécution d'un print par exemple)
Appliquez la méthode à votre calcul de la fiabilité en y ajoutant le fait que la valeur N0 ne peut pas être égale à 0 puisque la division par 0 donnerait une erreur.
Pour être sûr que votre code fonctionne bien, vous devrez tester les 3 cas possibles avec Nt = 490, puis N0 = 0 puis N0 = -2
Vous testerez N0 = "toto". Que se passe t-il ? comment tester ce cas ?
Solution
# code 401-2
N0 = 1000
Nt = - 2
err1 = (Nt == 0)
if err1 :
mess = "N0 ne doit pas être inférieur ou égal à 0"
else :
Rt = Nt/N0
err2 = Rt<0 or Rt>1
if err2 :
mess = "La fiabilité doit ête comprise entre 0 et 1"
else :
mess = "La fiabilité est de " + str(Rt*100) + " %"
print(mess)
Gérer les exceptions
Dans l'exercice précédent, le programme est interrompu avec un message d'erreur.
Jusque là, nous avions testé des incohérences (TRG ou R(t) non compris entre 0 et 1) ou anticipé sur le risque d'une erreur (division par 0)
Avec python, il est possible d'essayer si une instruction peut s'exécuter et mettre en place des traitements adaptés selon différents cas :
pas d'erreur
présence d'une erreur
tu = 95
to = "toto"
try:
to = tu/to
print("Ok pas d'erreur")
except :
print("Impossible de faire le calcul de tu/to")
Tester ce code avec to = 100, to = 90, to = 0, to = "toto"
On peut faire mieux en récupérant la nature de l'erreur
tu = 95
to = 100
trg = 0.99 # Pour initialiser le trg calculé plus loin en float.
try:
trg = tu/to
print("Ok pas d'erreur")
except TypeError:
print("Merci d'utiliser des chiffres")
except ZeroDivisionError:
print("Merci de ne pas utiliser le 0")
Tester ce code avec to = 100, to = 90, to = 0, to = "toto"
Vous remarquerez que l'incohérence des données (cas trg non compris entre 0 et 1) n'est pas évalué ici, car cela ne déclenche pas une erreur d'exécution, il fut donc faire un test traditionnel avec if comme nous l'avons vu précédemment.
Question
Mettre en oeuvre les exceptions et les tests pour afficher les erreurs et incohérences lors du calcul de R(t)
Solution
# code 401-3
N0 = 1000
Nt = 490
try:
Rt = Nt/N0
err = Rt<0 or Rt>1
if err :
mess = "La fiabilité doit ête comprise entre 0 et 1"
else :
mess = "La fiabilité est de " + str(Rt*100) + " %"
except TypeError:
mess = "Merci d'utiliser des chiffres"
except ZeroDivisionError:
mess = "Merci de ne pas utiliser le 0"