Assertions et préconditions
Dire ce qu'une fonction suppose et ce qu'elle garantit : précondition, postcondition, invariant, l'instruction assert et son échec, programmation défensive, et la différence avec le contrôle d'une saisie.
- 26 cartes
- 5 thèmes
- Gratuit
Le programme, thème par thème
Le poids de chaque thème suit celui que lui donne l'examen.
- Notions
- Questions
- Ranger et relier
- Mises en situation
- Comprendre
Quelques cartes du deck
Précondition : de quoi s'agit-il ?
Voir la réponse
Condition qui doit être vraie au moment de l'appel d'une fonction pour qu'elle soit sûre de bien fonctionner.
Elle engage l'appelant : si
racine(n)supposen >= 0, c'est à celui qui appelle de ne pas lui passer-4.Qu'affiche ce programme ?
```python
def racine(n):
assert n >= 0, "n doit être positif ou nul"
return n ** 0.5
print(racine(9))
print(racine(-4))
print("fin")`3.0, puisAssertionError: n doit être positif ou nul, sansfin3.0, puis le calcul de(-4) ** 0.5s'exécute, puisfins'affiche3.0,n doit être positif ou nul, puisfin3.0, puis uneValueErrorlevée sur la ligne dureturn
Voir la réponse
3.0, puisAssertionError: n doit être positif ou nul, sansfinassertlèveAssertionErroravec le message quand la condition est fausse, et rien ne s'exécute après : ni lereturn, niprint("fin"). L'arrêt se fait à la ligne de l'assertion, pas dans le calcul.Une … doit être vraie avant l'appel, une … est garantie après.
Voir la réponse
Une précondition doit être vraie avant l'appel, une postcondition est garantie après.
Les deux forment le contrat de la fonction : si l'appelant respecte la précondition, la fonction garantit la postcondition.
Postcondition : de quoi s'agit-il ?
Voir la réponse
Condition que la fonction garantit sur son résultat quand elle se termine, si ses préconditions étaient respectées.
Elle engage la fonction : pour
trier(t), le résultat contient les mêmes éléments quet, rangés en ordre croissant.Un programme demande un âge à l'utilisateur et le passe à une fonction qui suppose
age >= 0. Que faut-il faire de la saisie ?- La contrôler avec un
ifet redemander - Écrire
assert age >= 0et laisser le programme s'arrêter si l'utilisateur se trompe - Ne rien contrôler : la précondition de la fonction suffit à protéger le programme
- Remplacer toute valeur négative par 0 sans prévenir
Voir la réponse
La contrôler avec un
ifet redemanderUne saisie fautive est un cas prévu : on la traite avec un
ifet un message. L'assertion protège des erreurs de programmation, et Python peut l'ignorer avec l'option-O.- La contrôler avec un