Langages et programmation : fonctions, spécification et tests
Constructions élémentaires d'un langage, fonctions et portée des variables, spécification (docstring, préconditions, postconditions), assertions et jeux de tests, mise au point et erreurs fréquentes, modules et bibliothèques.
1. Constructions élémentaires
Propriété · Les briques de tout programme
Affectation, séquence d'instructions, instruction conditionnelle (if/elif/else), boucle bornée (for), boucle non bornée (while), appel de fonction. Tous les langages impératifs (Python, C, JavaScript…) les proposent avec des syntaxes différentes.
2. Fonctions et spécification
Exemple · Une fonction documentée
def moyenne(notes):
"""Renvoie la moyenne d'une liste de nombres.
Précondition : notes est une liste non vide de nombres.
Postcondition : le résultat est compris entre min(notes) et max(notes)."""
assert len(notes) > 0, "liste vide"
return sum(notes) / len(notes)Définition · Portée
Une variable créée dans une fonction est locale : elle n'existe que pendant l'exécution de la fonction. Une fonction communique avec l'extérieur par ses paramètres et sa valeur de retour (return), pas par des variables globales.
3. Tester
Propriété · Assertions et jeux de tests
assert condition provoque une erreur si la condition est fausse. Un jeu de tests couvre des cas usuels, des cas limites (liste à un élément, valeurs égales, zéro, négatifs) et des cas d'erreur. Un test réussi ne prouve pas que le programme est correct, mais un test échoué prouve une erreur.
Exemple · Tests
assert moyenne([10, 20]) == 15
assert moyenne([12]) == 12
assert moyenne([-4, 4]) == 04. Mise au point
Attention · Erreurs fréquentes
Indentation incorrecte ; = au lieu de == ; indice hors limites (range(len(t) + 1)) ; boucle infinie ; oubli du return (la fonction renvoie alors None) ; division entière // confondue avec /. Afficher des valeurs intermédiaires (print) ou utiliser un débogueur aide à localiser l'erreur.
Activité · Utiliser une bibliothèque
math et le module random ; afficher $\sqrt{2}$ et tirer un entier au hasard entre $1$ et $6$. Consulter l'aide avec help(math.sqrt).import math, random ; math.sqrt(2) donne 1.4142135623730951 ; random.randint(1, 6).S'entraîner
Exercices corrigés
🎓 20 exercices corrigés et un quiz vous attendent dans ce chapitre.
Créez votre compte gratuit pour voir les corrections, faire les quiz et suivre votre progression.
Valeur renvoyée
★☆☆Que renvoie def f(x): x * 2 appelée avec f(3) ?
Corriger la fonction
★☆☆Corriger la fonction précédente.
Portée
★★☆Que provoque def g(): a = 5 ; g() ; print(a) ?
Docstring
★☆☆À quoi sert la chaîne entre triples guillemets sous un def ?
Précondition
★★☆Quelle précondition pour une fonction racine(x) qui renvoie $\sqrt{x}$ ?
Assertion
★★☆Ajouter une assertion qui vérifie la précondition précédente.
Jeu de tests
★★☆Proposer trois tests pour une fonction maximum(t).
Cas limites
★★☆Quels cas limites tester pour une fonction qui compte les voyelles d'une chaîne ?
Test et preuve
★★☆Tous les tests passent. Le programme est-il forcément correct ?
Trouver l'erreur
★★☆Pourquoi cette fonction provoque-t-elle une erreur ?
def somme(t):
s = 0
for i in range(len(t) + 1):
s = s + t[i]
return sDivision
★☆☆Que valent 7 / 2 et 7 // 2 en Python ? Et 7 % 2 ?
Égalité
★☆☆Quelle est l'erreur dans if x = 3: ?
Fonction est_pair
★☆☆Écrire une fonction est_pair(n) renvoyant un booléen, avec deux tests.
Spécifier
★★★Écrire la docstring complète d'une fonction indice(t, x) qui renvoie le premier indice de x dans t, ou $-1$.
Implémenter indice
★★☆Écrire la fonction indice de l'exercice précédent.
Module math
★☆☆Comment calculer $\pi \times 3^2$ en Python ?
Nombre aléatoire
★☆☆Simuler un lancer de dé en Python.
Effet de bord
★★★Que contient t après l'appel ajoute(t) avec def ajoute(l): l.append(0) et t = [1] ?
Paradigmes
★★☆Citer deux langages autres que Python et leur domaine d'usage.
Vrai ou faux
★★☆a) Une variable locale est visible partout. b) assert sert à vérifier une condition. c) Une fonction sans return renvoie None.
Vérifier
Avez-vous bien compris ?
Répondez au quiz : la correction s'affiche immédiatement.