QCM
Vérifications rapides

Six questions courtes sur les méthodes de programmation.

1.3 + 4 est :

2.n = 42 est :

3.La précondition d’une fonction décrit :

4.Dans ce chapitre, un invariant de boucle est utilisé comme :

5.Parmi les affirmations suivantes sur assert, lesquelles sont vraies ?

6.D’après la méthode « Partitionner le domaine d’entrée », quelles catégories de cas faut-il tester au minimum ?

Exercice
Expression ou instruction ?

Pour chacun des fragments de code Python suivants, indiquer s’il s’agit d’une expression ou d’une instruction, en justifiant brièvement.

a.

len(l)

Une expression : elle se calcule en une valeur (la longueur de l), qui peut par exemple être affectée à une variable ou passée en argument.

b.

x = 5

Une instruction : elle a l’effet de bord d’associer la valeur au nom x, et ne se calcule pas elle-même en une valeur utilisable.

c.

n % 2 == 0

Une expression : elle se calcule en une valeur booléenne (True ou False).

d.

l.append(3)

Une instruction : append modifie la liste l en place (effet de bord), et renvoie None, une valeur sans intérêt ici.

Que fait cette méthode, et que renvoie-t-elle ?

Exercice
Une précondition vérifiée par assert

On donne la fonction suivante :

def racine_carree_positive(x):
    """
    Précondition : x est un nombre positif ou nul.
    """
    assert x >= 0, "racine_carree_positive : x doit être positif ou nul"
    return x ** 0.5

a.

Que se passe-t-il exactement lors de l’appel racine_carree_positive(-3) ?

L’expression x >= 0 vaut False (puisque ), donc l’instruction assert interrompt immédiatement l’exécution en levant une AssertionError, accompagnée du message "racine_carree_positive : x doit être positif ou nul". La ligne return x ** 0.5 n’est jamais atteinte.

b.

Cette fonction reçoit une valeur x saisie directement par un utilisateur au clavier, potentiellement erronée (l’utilisateur peut très bien taper un nombre négatif). L’assert ci-dessus est-il, dans ce contexte, un bon moyen de gérer cette erreur ? Justifier à l’aide du cours.

Non. Le cours précise explicitement qu’assert sert à vérifier des conditions que l’on croit toujours vraies compte tenu de la spécification — typiquement des préconditions internes au programme — et non à gérer des erreurs prévisibles comme une saisie utilisateur incorrecte. Pour ce second cas, il faudrait un traitement dédié (validation de la saisie, exception spécifique, nouvelle demande à l’utilisateur), pas une simple assert.

La suite est gratuite avec un compte

Encore 3 blocs dans ce document. Créer un compte ne demande qu'une adresse e-mail.