Aller au contenu principal
Première⏱ 50 minutes

Algorithmique et programmation : les listes en Python — Entraînement type évaluation

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

Barème indicatif : 20 points. Sans ordinateur ni calculatrice : les programmes sont à lire et à écrire « à la main ».

Exercice 1 (4 points) — Automatismes

Réponds directement, sans justification (0,5 point par question).

  1. Que vaut len([5, 2, 7]) ?
  2. L = [4, 9, 1]. Que vaut L[-1] ?
  3. Avec la même liste, que vaut L[0] ?
  4. Que vaut [2 * k for k in range(4)] ?
  5. Combien de valeurs range(3, 7) produit-il ?
  6. Que vaut 17 % 5 ?
  7. Écris 34\dfrac34 sous forme décimale.
  8. Après L = [1] puis L.append(5), que vaut L ?
Voir le corrigé
  1. 3.
  2. 1.
  3. 4.
  4. [0, 2, 4, 6].
  5. 44 valeurs : 3,4,5,63, 4, 5, 6.
  6. 2.
  7. 0,750{,}75.
  8. [1, 5].

Exercice 2 (5 points) — Faire tourner un programme à la main

L = []
for k in range(1, 6):
    if k % 2 == 1:
        L.append(k * k)
    else:
        L.append(0)
print(L, len(L))
  1. Recopie et complète le tableau donnant, pour chaque tour de boucle, la valeur de k et le contenu de L à la fin du tour. (2,5 points)
  2. Qu'affiche le programme ? (1 point)
  3. Écris, en une seule ligne et en compréhension, la liste des carrés des entiers impairs de 11 à 55. (1,5 point)
Voir le corrigé
TourkL à la fin du tour
11[1]
22[1, 0]
33[1, 0, 9]
44[1, 0, 9, 0]
55[1, 0, 9, 0, 25]
  1. [1, 0, 9, 0, 25] 5.
  2. [k * k for k in range(1, 6) if k % 2 == 1], qui vaut [1, 9, 25].

Exercice 3 (5 points) — Une suite

On considère la suite définie par u0=100u_0 = 100 et un+1=0,9 un+5u_{n+1} = 0{,}9\,u_n + 5.

  1. Calcule u1u_1 et u2u_2. (1 point)
  2. Écris une fonction liste_termes(n) qui renvoie la liste [u0,u1,…,un][u_0, u_1, \dots, u_n]. (2 points)
  3. Écris une fonction premier_indice(L, seuil) qui renvoie le premier indice i tel que L[i] < seuil, ou -1 s'il n'y en a pas. (2 points)
Voir le corrigé
  1. u1=0,9×100+5=95u_1 = 0{,}9 \times 100 + 5 = 95 ; u2=0,9×95+5=85,5+5=90,5u_2 = 0{,}9 \times 95 + 5 = 85{,}5 + 5 = 90{,}5.
  2. def liste_termes(n):
        L = [100]
        for i in range(n):
            L.append(0.9 * L[-1] + 5)
        return L
    
  3. def premier_indice(L, seuil):
        for i in range(len(L)):
            if L[i] < seuil:
                return i
        return -1
    
    Dès qu'on trouve un indice qui convient, return arrête la fonction ; si la boucle se termine sans l'avoir trouvé, on renvoie -1.

Exercice 4 (6 points) — Statistiques

On considère la liste L = [12, 7, 15, 9, 7].

  1. Écris une fonction etendue(L) qui renvoie la différence entre le plus grand et le plus petit élément, sans utiliser max ni min. (2,5 points)
  2. Écris une fonction moyenne(L) sans utiliser sum. (1,5 point)
  3. Que renvoient etendue(L) et moyenne(L) pour la liste ci-dessus ? (1 point)
  4. Écris en compréhension la liste des éléments de L strictement supérieurs à la moyenne. (1 point)
Voir le corrigé
  1. def etendue(L):
        grand = L[0]
        petit = L[0]
        for x in L:
            if x > grand:
                grand = x
            if x < petit:
                petit = x
        return grand - petit
    
  2. def moyenne(L):
        s = 0
        for x in L:
            s = s + x
        return s / len(L)
    
  3. etendue(L) renvoie 15−7=815 - 7 = 8 ; moyenne(L) renvoie 505=10\dfrac{50}{5} = 10 (affiché 10.0).
  4. [x for x in L if x > moyenne(L)], qui vaut [12, 15].