Les tests en python

(code sous licence creative commun CC BY-NC-SA BY Alexis Dendiével)

Télécharger le pdf

Télécharger le notebook

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)