Aller au contenu principal
Seconde⏱ 50 minutes

Algorithmique et programmation 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. Calculatrice et ordinateur interdits : tous les programmes se font tourner à la main.

Exercice 1 (4 points) — Types et affectation

  1. Donne la valeur et le type de : 17 // 5, 17 % 5, 17 / 5, 17 > 5. (2 points)
  2. Donne les valeurs de a et b après les instructions suivantes. (2 points)
    a = 4
    b = 7
    a = b - a
    b = b - a
    
Voir le corrigé
  1. 17 // 5 vaut 3 (int) ; 17 % 5 vaut 2 (int) ; 17 / 5 vaut 3.4 (float) ; 17 > 5 vaut True (bool).
  2. Après a = b - a : a vaut 7−4=37 - 4 = 3. Après b = b - a : b vaut 7−3=47 - 3 = 4. Finalement a vaut 3 et b vaut 4 (les valeurs ont été échangées sans variable auxiliaire).

Exercice 2 (4 points) — Condition

Un cinéma pratique les tarifs suivants : 55 € pour les moins de 1212 ans, 77 € à partir de 6565 ans, 1010 € sinon.

  1. Écris une fonction prix(age) qui renvoie le tarif. (3 points)
  2. Que renvoient prix(12) et prix(65) avec ta fonction ? (1 point)
Voir le corrigé
  1. def prix(age):
        if age < 12:
            return 5
        elif age >= 65:
            return 7
        else:
            return 10
    
  2. prix(12) renvoie 10 (1212 n'est pas strictement inférieur à 1212) ; prix(65) renvoie 7.

Exercice 3 (4 points) — Boucle bornée

u = 3
for i in range(4):
    u = 2 * u - 1
  1. Combien de fois la boucle est-elle exécutée ? (1 point)
  2. Donne les valeurs successives de u, puis sa valeur finale. (3 points)
Voir le corrigé
  1. range(4) parcourt 0,1,2,30, 1, 2, 3 : la boucle est exécutée 44 fois.
  2. u : 3→5→9→17→333 \to 5 \to 9 \to 17 \to 33. Valeur finale : 3333.

Exercice 4 (4 points) — Boucle non bornée

n = 0
p = 1
while p <= 500:
    p = 3 * p
    n = n + 1
  1. Fais tourner ce programme à la main (tableau des valeurs de p et n). (2,5 points)
  2. Quelles sont les valeurs finales de n et p ? Que représente n ? (1,5 point)
Voir le corrigé
  1. p1392781243729
    n0123456
  2. La boucle s'arrête quand p dépasse 500500 : n vaut 66 et p vaut 729729. n est le plus petit entier tel que 3n>5003^n > 500.

Exercice 5 (4 points) — Hasard

from random import randint

def experience():
    d1 = randint(1, 6)
    d2 = randint(1, 6)
    return d1 == d2

def frequence(N):
    c = 0
    for i in range(N):
        if experience():
            c = c + 1
    return c / N
  1. Quel est le type de la valeur renvoyée par experience() ? Que simule cette fonction ? (1,5 point)
  2. Que calcule frequence(N) ? (1 point)
  3. Autour de quelle valeur se situera frequence(10000) ? Justifie. (1,5 point)
Voir le corrigé
  1. d1 == d2 est une comparaison : la fonction renvoie un booléen (True ou False). Elle simule le lancer de deux dés et indique si l'on a obtenu un double.
  2. frequence(N) répète NN fois l'expérience, compte les doubles dans c et renvoie la fréquence des doubles.
  3. Il y a 66 doubles parmi les 3636 issues équiprobables : P=636=16≈0,167P = \dfrac{6}{36} = \dfrac16 \approx 0{,}167. Pour N=10 000N = 10\,000, la fréquence sera proche de 0,1670{,}167 (par exemple 0,17110{,}1711), sans être exactement égale.