1. Variables, types et affectation
Exercice 1 — ⭐
- Donne le type de chacune des valeurs :
12,12.0,"12",12 > 5,12 / 4. - Calcule
17 // 5,17 % 5et2 ** 5. - Quelles sont les valeurs de
xetyaprès ces instructions ?
À quoi sert la variablex = 3 y = 8 t = x x = y y = tt?
Voir le corrigé
int,float,str,bool,float(une division/donne toujours un flottant :3.0).17 // 5vaut3,17 % 5vaut2(car ),2 ** 5vaut32.xvaut8etyvaut3: les valeurs ont été échangées. La variabletsert à garder l’ancienne valeur dex, qui serait sinon perdue à la lignex = y.
2. Instructions conditionnelles
Exercice 2 — ⭐⭐
On reprend la fonction mention du cours.
- Que renvoient
mention(17),mention(13.5)etmention(9.99)? - Un élève écrit la version ci-dessous. Que renvoie
mention2(17)? Explique l’erreur.def mention2(note): if note >= 10: return "Passable" elif note >= 16: return "Très bien" else: return "Insuffisant"
Voir le corrigé
"Très bien","Assez bien","Insuffisant".mention2(17)renvoie"Passable": la première condition17 >= 10est vraie, donc Python exécute ce bloc et ne teste jamaisnote >= 16. Il faut tester les conditions de la plus exigeante à la moins exigeante.
Exercice 3 — ⭐⭐
Une année est bissextile si elle est divisible par mais pas par , ou si elle est divisible par .
- Les années , , et sont-elles bissextiles ?
- Explique le rôle de
annee % 4 == 0dans la fonctionest_bissextiledu cours. - Écris une fonction
nb_jours(annee)qui renvoie le nombre de jours de l’année ( ou ), en utilisantest_bissextile.
Voir le corrigé
- : oui. : non (pas divisible par ). : non (divisible par mais pas par ). : oui (divisible par ).
annee % 4est le reste de la division deanneepar ; il vaut exactement quand l’année est divisible par . C’est un booléen.-
def nb_jours(annee): if est_bissextile(annee): return 366 else: return 365
3. Boucles bornées
Exercice 4 — ⭐
- Quelles valeurs parcourent
range(5),range(2, 7)etrange(0, 20, 5)? - Écris un programme qui calcule la somme . Quelle valeur obtiens-tu ?
- Écris une boucle qui affiche la table de multiplication de (de à ).
Voir le corrigé
0, 1, 2, 3, 4;2, 3, 4, 5, 6;0, 5, 10, 15.-
On obtient .s = 0 for k in range(1, 11): s = s + k**2 -
for k in range(1, 11): print(7, "x", k, "=", 7 * k)
Exercice 5 — ⭐⭐
- La factorielle de est . Écris une fonction
factorielle(n)avec une bouclefor. Vérifie quefactorielle(5)renvoie120. - Un capital de € est placé à par an. Écris une boucle qui calcule le capital au bout de ans. Quel calcul direct aurait-on pu faire ?
Voir le corrigé
-
L’accumulateur d’un produit s’initialise à (et non à ).def factorielle(n): r = 1 for k in range(1, n + 1): r = r * k return rfactorielle(5)renvoie . -
On obtient environ €. Calcul direct : .c = 1000 for i in range(10): c = c * 1.02
4. Boucles non bornées
Exercice 6 — ⭐⭐
On cherche le plus petit entier tel que .
- Complète la fonction :
def seuil_somme(M): s = 0 n = 0 while ...: n = n + 1 s = s + n return n - Que renvoie
seuil_somme(1000)? Vérifie avec la formule .
Voir le corrigé
- On continue tant que la somme n’a pas dépassé :
while s <= M:. - La fonction renvoie
45. Vérification : et .
Exercice 7 — ⭐⭐
On considère le programme :
x = 100
n = 0
while x > 1:
x = x / 2
n = n + 1
- Fais-le tourner à la main en notant les valeurs successives de
xetn. - Quelles sont les valeurs de
xet denà la fin ? Interprèten. - Que se passerait-il si l’on remplaçait
x = x / 2parx = x * 2?
Voir le corrigé
x: ;n: .xvaut etnvaut : il faut diviser fois par pour passer sous (car ).xaugmenterait sans cesse : la conditionx > 1resterait toujours vraie, et la boucle ne s’arrêterait jamais (boucle infinie).
5. Fonctions
Exercice 8 — ⭐⭐⭐
La suite de Syracuse d’un entier : si est pair, on le divise par ; sinon, on le remplace par . On recommence jusqu’à obtenir .
- Écris la suite obtenue à partir de .
- Écris une fonction
syracuse(n)qui renvoie le nombre d’étapes nécessaires pour atteindre . - Que renvoie
syracuse(6)? Etsyracuse(7)?
Voir le corrigé
- .
-
def syracuse(n): etapes = 0 while n != 1: if n % 2 == 0: n = n // 2 else: n = 3 * n + 1 etapes = etapes + 1 return etapes syracuse(6)renvoie8(on compte les flèches de la question 1).syracuse(7)renvoie16. (Personne n’a jamais démontré que cette boucle s’arrête pour tout entier : c’est un problème ouvert célèbre !)
6. Fonctions et hasard
Exercice 9 — ⭐⭐
- Écris une fonction
somme_deux_des()qui renvoie la somme de deux dés équilibrés. - Écris une fonction
frequence_sept(N)qui simule lancers de deux dés et renvoie la fréquence de la somme . - Autour de quelle valeur les résultats de
frequence_sept(10000)devraient-ils se situer ? Justifie avec le tableau des sommes.
Voir le corrigé
-
(Attention :from random import randint def somme_deux_des(): return randint(1, 6) + randint(1, 6)randint(2, 12)ne convient pas, car les sommes ne sont pas équiprobables.) -
def frequence_sept(N): compteur = 0 for i in range(N): if somme_deux_des() == 7: compteur = compteur + 1 return compteur / N - La somme correspond à cases sur : . Les fréquences obtenues (par exemple ) varient d’une exécution à l’autre, autour de cette valeur.