Aller au contenu principal
3e⏱ 50 minutes

Python : boucles et fonctions — Entraînement type évaluation

Pour un entraînement qui sert vraiment à quelque chose : pas de cours sous les yeux, une feuille et un stylo (pas d'ordinateur). Note-toi ensuite avec le corrigé.

Barème indicatif : 20 points.

Exercice 1 (4 points) — Vocabulaire

  1. Dans quel cas utilise-t-on une boucle for, plutôt qu'une boucle while ? (1 point)
  2. Que produit range(6) ? (1 point)
  3. Quelle est la différence entre définir une fonction et l'appeler ? (1 point)
  4. À quoi sert le mot-clé return dans une fonction ? (1 point)
Voir le corrigé
  1. On utilise for quand le nombre de répétitions est connu à l'avance ; while quand ce nombre dépend d'une condition qui évolue en cours d'exécution.
  2. range(6) produit les 66 valeurs 0,1,2,3,4,50, 1, 2, 3, 4, 5.
  3. Définir une fonction (avec def) décrit son code sans l'exécuter ; l'appeler exécute réellement ce code.
  4. return permet à une fonction de renvoyer un résultat, utilisable ensuite par le programme qui l'a appelée.

Exercice 2 (4 points) — Lire une boucle for

for i in range(3, 8):
    print(i, "->", i * i)
  1. Quelles valeurs successives prend i dans ce programme ? (1 point)
  2. Combien de lignes ce programme affiche-t-il au total ? (1 point)
  3. Que va afficher la toute première ligne produite par ce programme ? (1 point)
  4. Que va afficher la toute dernière ligne produite par ce programme ? (1 point)
Voir le corrigé
  1. i prend successivement les valeurs 3,4,5,6,73, 4, 5, 6, 7.
  2. 55 lignes (une par valeur de i).
  3. La première ligne affichée est 3 -> 9 (car 3×3=93 \times 3 = 9).
  4. La dernière ligne affichée est 7 -> 49 (car 7×7=497 \times 7 = 49).

Exercice 3 (4 points) — Lire une boucle while

total = 0
n = 1
while total < 20:
    total = total + n
    n = n + 1
print(total)
  1. Donne les valeurs successives de total au fil des tours de boucle. (2 points)
  2. Quelle valeur ce programme affiche-t-il finalement ? (1 point)
  3. Pourquoi une boucle while est-elle adaptée ici plutôt qu'une boucle for ? (1 point)
Voir le corrigé
  1. Tour par tour : total=0+1=1\text{total} = 0 + 1 = 1 ; 1+2=31 + 2 = 3 ; 3+3=63 + 3 = 6 ; 6+4=106 + 4 = 10 ; 10+5=1510 + 5 = 15 ; 15+6=2115 + 6 = 21. Les valeurs successives de total sont donc 1,3,6,10,15,211, 3, 6, 10, 15, 21.
  2. Dès que total atteint 2121, la condition total < 20 devient fausse (2121 n'est pas strictement inférieur à 2020) : la boucle s'arrête, et le programme affiche 21.
  3. On ne connaît pas à l'avance le nombre de tours nécessaires pour que total dépasse 2020 (cela dépend des valeurs accumulées à chaque tour) : une boucle while, pilotée par une condition, est donc adaptée, contrairement à for qui suppose un nombre de tours fixé d'avance.

Exercice 4 (4 points) — Écrire une fonction

  1. Écris une fonction est_pair(nombre) qui renvoie True si nombre est pair, et False sinon (indication : un nombre est pair si le reste de sa division par 22 vaut 00 ; en Python, ce reste s'obtient avec nombre % 2). (2 points)
  2. Écris un programme qui utilise cette fonction pour afficher si 1717 est pair. (1 point)
  3. Écris un programme qui utilise cette fonction pour afficher si 2424 est pair. (1 point)
Voir le corrigé
  1. def est_pair(nombre):
        return nombre % 2 == 0
    
  2. print(est_pair(17))
    
    Affiche False (car 1717 est impair : 17÷217 \div 2 laisse un reste de 11).
  3. print(est_pair(24))
    
    Affiche True (car 2424 est pair : 24÷224 \div 2 laisse un reste de 00).

Exercice 5 (4 points) — Combiner boucle et fonction

Écris une fonction compte_pairs(n) qui renvoie le nombre d'entiers pairs compris entre 11 et nn (inclus), en utilisant une boucle for (tu peux réutiliser le principe de la question précédente, sans être obligé de réutiliser est_pair). (4 points)

Voir le corrigé
def compte_pairs(n):
    compteur = 0
    for i in range(1, n + 1):
        if i % 2 == 0:
            compteur = compteur + 1
    return compteur

La variable compteur est initialisée à 00, puis augmente de 11 à chaque fois que i est pair (reste nul dans la division par 22), en parcourant tous les entiers de 11 à nn grâce à range(1, n + 1).