Les tests en python¶
(code sous licence creative commun CC BY-NC-SA BY Alexis Dendiével)
Lancer le notebook sur binder (lent)
Les tests constituent, avec les boucles, l’une des bases fondamentales de la programmation. Régulièrement en effet, nous devons faire des tests afin de dérouler l’algorithme.
Si telle condition est vrai alors faire ceci
sinon faire cela
if / else¶
[1]:
n = 2
if n > 3:
print("n est supérieur à 3")
else:
print("n est inférieur ou égal à 3")
n est inférieur ou égal à 3
Un exemple lié à la classification périodique des éléments: On se propose de savoir si l’élément, défini par son numéro atomique, apparient ou non aux trois premières linges de la classification
[2]:
# premier test
def ligne(Z):
"""
Dit si un élément fait partie des trois premières lignes du tableau périodique.
:param Z: numéro atomique
"""
# test vérifiant si l'élément fait partie des trois premières lignes
print("Elément de numéro atomique", Z, ":")
if Z<= 18:
print(" fait partie des trois premières lignes de la classification")
else:
print(" ne fait pas partie des trois premières lignes de la classification")
ligne(3)
ligne(5)
Elément de numéro atomique 3 :
fait partie des trois premières lignes de la classification
Elément de numéro atomique 5 :
fait partie des trois premières lignes de la classification
La syntaxe traduit l’algorythme en langage python:
prenons un exemple plus conséquent afin de voir l’utilité du test if en contexte. Il s’agit d’un programme calculant les forces électromagnétiques et gravitationnelles, et les comparant. A la lecture du programme, vous trouverez deux tests: - le premier donne le côté attractif ou répulsif de la force électromagnétique - le second compare les deux forces afin de définir la prédominance
[3]:
# comparaison des forces de gravitation et électromagnétique
# entre deux masses m1 et m2 de charge q1 et q2 séparées d'une distance d
def comparaison_forces(m1, e1, m2, e2, d):
"""
Comparaison des forces de gravitation et électromagnétique entre deux
masses m1 et m2 (en kg), de charge q1 et q2 (en multiple de e, la
charge élémentaire), séparées d'une distance d (en mètres)
:param m1: masse m1 (en kg)
:param e1: charge q1 (en multiple de e)
:param m2: masse m2 (en kg)
:param e2: charge q2 (en multiple de e)
:param d: distance séparant m1 et m2 (en mètres)
"""
# les constantes utilisées
G = 6.67e-11
k = 9.0e9
e = 1.6e-19
# présentation du programme
print("Comparaison des forces de gravitation et électromagnétiques : ")
print(" - objet 1 : masse {0:.2e} kg, charge {1:.2e} C".format(m1, e1*e))
print(" - objet 2 : masse {0:.2e} kg, charge {1:.2e} C".format(m2, e2*e))
# caractère attractif ou répulsif
if e1*e2 > 0:
caractere = "répulsive"
else:
caractere = "attractif"
# calcul des forces
FG = G*m1*m2/d**2
FE = abs(k*e*e1*e*e2/d**2)
# comparaison des forces
if FG > FE:
preponderant = "force de gravitation"
comparaison = FG/FE
else:
preponderant = "force électromagnétique"
comparaison = FE/FG
# impression des résultats
print("\nRésultat:\n")
print("- la valeur de la force de gravitation est: {0:.2e}".format(FG), ' N')
print(" cette force est attractive")
print("- la valeur de la force électromagnétique est: {0:.2e}".format(FE), ' N')
print(" cette force est", caractere)
print("- la", preponderant, "est prépondérante")
print("- le rapport de ces deux forces est: {0:.2e}".format(comparaison))
# Utilisation de la fonction
comparaison_forces(m1=5e-7, e1=400, m2=5e-7, e2=400, d=3e-6)
Comparaison des forces de gravitation et électromagnétiques :
- objet 1 : masse 5.00e-07 kg, charge 6.40e-17 C
- objet 2 : masse 5.00e-07 kg, charge 6.40e-17 C
Résultat:
- la valeur de la force de gravitation est: 1.85e-12 N
cette force est attractive
- la valeur de la force électromagnétique est: 4.10e-12 N
cette force est répulsive
- la force électromagnétique est prépondérante
- le rapport de ces deux forces est: 2.21e+00
Plusieurs points: - Dans ces exemples, le else n’est en rien obligatoire.
if / elif / else¶
On souhaite parfois faire plusieurs tests imbriqués, on utilise pour cela l’instruction elif (else if)
[4]:
# test imbriqué
def ligne(Z):
"""
Indique la ligne dont fait partie l'élément
:param Z: numéro atomique
"""
print("Elément de numéro atomique Z = ",Z)
# test vérifiant si l'élément fait partie des trois premières lignes
if Z<= 2:
print(" fait partie de la première ligne de la classification")
elif Z <=10:
print(" fait partie de la deuxième ligne de la classification")
elif Z <=18:
print(" fait partie de la troisième ligne de la classification")
else:
print(" ne fait pas partie des trois premières lignes de la classification")
# Utilisation
ligne(7)
ligne(1)
ligne(16)
ligne(33)
Elément de numéro atomique Z = 7
fait partie de la deuxième ligne de la classification
Elément de numéro atomique Z = 1
fait partie de la première ligne de la classification
Elément de numéro atomique Z = 16
fait partie de la troisième ligne de la classification
Elément de numéro atomique Z = 33
ne fait pas partie des trois premières lignes de la classification
Attention, erreur fréquente : le test égal se note ==
, et pas =
(assignation de variable)