⌨ Spécialité NSI · Numérique et sciences informatiques Première Générale · Chapitre 7

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

paramètrespréconditionsfonction(boîte noire documentée)résultat renvoyépostconditionsLes tests vérifient que la fonction respecte sa spécification.
Une fonction spécifiée : ce qu'elle attend (préconditions) et ce qu'elle garantit (postconditions).

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]) == 0

4. 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

MatérielPython.
ConsigneImporter le module 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).
Résultatimport math, random ; math.sqrt(2) donne 1.4142135623730951 ; random.randint(1, 6).
BilanRéutiliser des fonctions documentées évite de « réinventer la roue » ; la documentation est la spécification des fonctions.

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.

1

Valeur renvoyée

★☆☆

Que renvoie def f(x): x * 2 appelée avec f(3) ?

🔒 Correction réservée aux membres Créer un compte gratuit →
4

Docstring

★☆☆

À quoi sert la chaîne entre triples guillemets sous un def ?

🔒 Correction réservée aux membres Créer un compte gratuit →
5

Précondition

★★☆

Quelle précondition pour une fonction racine(x) qui renvoie $\sqrt{x}$ ?

🔒 Correction réservée aux membres Créer un compte gratuit →
6

Assertion

★★☆

Ajouter une assertion qui vérifie la précondition précédente.

🔒 Correction réservée aux membres Créer un compte gratuit →
7

Jeu de tests

★★☆

Proposer trois tests pour une fonction maximum(t).

🔒 Correction réservée aux membres Créer un compte gratuit →
8

Cas limites

★★☆

Quels cas limites tester pour une fonction qui compte les voyelles d'une chaîne ?

🔒 Correction réservée aux membres Créer un compte gratuit →
9

Test et preuve

★★☆

Tous les tests passent. Le programme est-il forcément correct ?

🔒 Correction réservée aux membres Créer un compte gratuit →
10

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 s
🔒 Correction réservée aux membres Créer un compte gratuit →
11

Division

★☆☆

Que valent 7 / 2 et 7 // 2 en Python ? Et 7 % 2 ?

🔒 Correction réservée aux membres Créer un compte gratuit →
13

Fonction est_pair

★☆☆

Écrire une fonction est_pair(n) renvoyant un booléen, avec deux tests.

🔒 Correction réservée aux membres Créer un compte gratuit →
14

Spécifier

★★★

Écrire la docstring complète d'une fonction indice(t, x) qui renvoie le premier indice de x dans t, ou $-1$.

🔒 Correction réservée aux membres Créer un compte gratuit →
15

Implémenter indice

★★☆

Écrire la fonction indice de l'exercice précédent.

🔒 Correction réservée aux membres Créer un compte gratuit →
16

Module math

★☆☆

Comment calculer $\pi \times 3^2$ en Python ?

🔒 Correction réservée aux membres Créer un compte gratuit →
18

Effet de bord

★★★

Que contient t après l'appel ajoute(t) avec def ajoute(l): l.append(0) et t = [1] ?

🔒 Correction réservée aux membres Créer un compte gratuit →
19

Paradigmes

★★☆

Citer deux langages autres que Python et leur domaine d'usage.

🔒 Correction réservée aux membres Créer un compte gratuit →
20

Vrai ou faux

★★☆

a) Une variable locale est visible partout. b) assert sert à vérifier une condition. c) Une fonction sans return renvoie None.

🔒 Correction réservée aux membres Créer un compte gratuit →

Vérifier

Avez-vous bien compris ?

Répondez au quiz : la correction s'affiche immédiatement.