Les exercices se font dans Thonny, dans le fichier 05_python_2.py.
Cours associés : 03 - Opérateurs , 06 - Chaînes de caractères , 07 - Chaînes : méthodes .
Pour chaque question, une seule réponse est correcte.
1. Que vaut l’expression 7 // 2 en Python ?
3.5313.0Réponse : B. L’opérateur // effectue la division entière (quotient sans la partie décimale). 7 // 2 = 3.
3.5 est le résultat de 7 / 2 (division flottante). Confusion entre / et //.1 est le résultat de 7 % 2 (reste de la division). Confusion entre // et %.// renvoie un entier, pas un flottant.2. Que vaut 2 ** 3 ?
685Réponse : B. ** est l’opérateur de puissance en Python. 2 ** 3 signifie $2^3 = 8$.
6 est le résultat de 2 * 3 (multiplication). Confusion entre ** et *.5 est le résultat de 2 + 3 (addition).3. Quelle est la valeur de 10 % 3 ?
33.3310Réponse : C. L’opérateur % (modulo) renvoie le reste de la division euclidienne. $10 = 3 \times 3 + 1$, donc le reste est 1.
3 est le quotient (10 // 3), pas le reste.3.33... est le résultat de 10 / 3. Confusion entre / et %.0 serait le résultat de 9 % 3 (car 9 est divisible par 3).4. Que vaut l’expression "bon" + "jour" ?
"bon jour""bonjour""bonjourbonjour"Réponse : B. L’opérateur + entre deux chaînes effectue une concaténation (mise bout à bout sans espace). "bon" + "jour" donne "bonjour".
"bon jour", il faudrait "bon" + " " + "jour"."bonjour" * 2.Un chronomètre indique une durée de 3 725 secondes. On veut l’écrire en heures, minutes et secondes.
total = 3725
heures = total // 3600
reste = total % 3600
minutes = reste // 60
secondes = reste % 60
print(f"{heures} h {minutes} min {secondes} s")
Sans exécuter le programme, calculer à la main la valeur de chaque variable.
Combien de fois 3600 tient-il dans 3725, et que reste-t-il ? Dans ce reste, combien de fois 60 tient-il ?
Qu’affiche le programme ? Vérifier dans Thonny.
Pourquoi utilise-t-on // pour calculer les heures, et % pour calculer le reste ?
Dans la division de la durée par 3600, que représente le quotient ? Et le reste ?
Modifier le programme pour une durée de 10 000 secondes. Quel résultat obtient-on ?
1. Une heure dure 3 600 secondes et une minute 60 secondes :
heures vaut 3725 // 3600, soit 1 ;reste vaut 3725 % 3600, soit 125 ;minutes vaut 125 // 60, soit 2 ;secondes vaut 125 % 60, soit 5.2. Le programme affiche 1 h 2 min 5 s.
3. total // 3600 donne le nombre d’heures complètes contenues dans la durée (le quotient), et total % 3600 les secondes qui restent une fois ces heures retirées (le reste). Les opérateurs // et % vont toujours ensemble pour décomposer une grandeur : temps, monnaie, changement de base.
4. Avec total = 10000, on obtient heures = 2, reste = 2800, minutes = 46 et secondes = 40 : le programme affiche 2 h 46 min 40 s.
Essayez de deviner les résultats des opérations suivantes, puis vérifiez dans l’interpréteur :
3 / 2 ; 3 // 2 ; 3 % 2 ; 3 ** 2 ; 2e3.
print(3 / 2)
print(3 // 2)
print(3 % 2)
print(3 ** 2)
print(2e3)
3 / 2 # 1.5 – division flottante
3 // 2 # 1 – division entière (quotient)
3 % 2 # 1 – modulo (reste)
3 ** 2 # 9 – puissance (3²)
2e3 # 2000.0 – notation scientifique (2 × 10³)
Piège : 2e3 n’est pas 2 * 3 mais la notation scientifique $2 \times 10^3 = 2000.0$, toujours de type float.
Calculez la moyenne de chacune des séries de nombres suivantes : 2 et 4 ; puis 4, 8 et 9 ; puis 12, 14/6 et 15.
La moyenne est la somme des valeurs divisée par leur nombre : les parenthèses comptent, comme dans (2 + 4) / 2.
m1 = (2 + 4) / 2
print(m1) # 3.0
m2 = (4 + 8 + 9) / 3
print(m2) # 7.0
m3 = (12 + 14/6 + 15) / 3
print(m3) # 9.777...
Attention : dans le dernier cas, 14/6 est une division Python (≈ 2.333), pas la fraction $\frac{14}{6}$ simplifiée. Les parenthèses autour du numérateur sont indispensables.
Le volume d’une sphère est donné par la formule $V = \frac{4}{3} \pi r^3$.
Calculer le volume d’une sphère de rayon 5.
Indication : pour obtenir la valeur de $\pi$, écrire from math import pi.
Définir d’abord r = 5, puis traduire la formule avec les opérateurs *, / et **.
from math import pi
r = 5
volume = (4/3) * pi * r ** 3
print(round(volume, 2)) # 523.6
Piège fréquent : écrire 4/3 * pi * r**3 fonctionne grâce à la priorité des opérations (la puissance est évaluée avant la multiplication et la division), mais les parenthèses rendent l’intention plus claire.
À l’aide de l’opérateur modulo %, testez la parité de chacun des nombres suivants : 1 ; 5 ; 20 ; 60/7.
Indication : le reste de la division de x par 2 est égal à zéro quand x est pair.
Pour 60/7, le quotient n’est pas un nombre entier : la parité a-t-elle un sens pour lui ?
print(1 % 2) # 1 → impair
print(5 % 2) # 1 → impair
print(20 % 2) # 0 → pair
print(60/7 % 2) # 0.571... → ni pair ni impair !
Point important : 60/7 donne un flottant (≈ 8.571). Le modulo d’un flottant est défini mais n’a pas de sens pour tester la parité, qui ne concerne que les entiers.
Trouvez des valeurs x et y telles que l’expression x < 1/3 < y soit vraie (renvoie True).
Afficher d’abord la valeur de 1/3, puis choisir x un peu plus petit et y un peu plus grand.
x = 0
y = 1
print(x < 1/3 < y) # True
Python permet les comparaisons chaînées : x < 1/3 < y est équivalent à x < 1/3 and 1/3 < y. Il suffit que x soit inférieur à $\frac{1}{3} \approx 0.333$ et y supérieur.
Autre solution : x = 0.3 et y = 0.4.
Écrire un programme qui demande à l’utilisateur de saisir une chaîne de caractères c et lui renvoie un message indiquant si la chaîne contient la lettre 'p' tout en indiquant sa position. Par exemple, si l’utilisateur entre "poire", le programme affiche : « le caractère ‘p’ se trouve à la position 0 ».
Indication : la méthode find() renvoie la position de la première occurrence d’un caractère, ou -1 s’il n’est pas trouvé.
Ranger le résultat de c.find('p') dans une variable, puis distinguer les deux cas avec un if.
c = input("Saisir une chaîne : ")
pos = c.find('p')
if pos != -1:
print(f"Le caractère 'p' se trouve à la position {pos} dans la chaîne")
else:
print("Le caractère 'p' n'est pas dans la chaîne")
Variante avec in :
c = input("Saisir une chaîne : ")
if 'p' in c:
print(f"Le caractère 'p' se trouve à la position {c.find('p')}")
else:
print("Le caractère 'p' n'est pas dans la chaîne")
Écrire un programme qui :
c ;Une chaîne ne se modifie pas : construire une nouvelle chaîne avec le dernier caractère c[-1], puis les caractères du milieu, ajoutés un à un par une boucle, et enfin le premier caractère c[0].
c = input("Saisir une chaîne : ")
print(f"Longueur : {len(c)} caractères")
milieu = ""
for i in range(1, len(c) - 1):
milieu = ...
nouvelle = ...
print(f"Après échange : {nouvelle}")
c = input("Saisir une chaîne : ")
print(f"Longueur : {len(c)} caractères")
# Les chaînes sont immuables : on construit une nouvelle chaîne
milieu = ""
for i in range(1, len(c) - 1):
milieu = milieu + c[i]
nouvelle = c[-1] + milieu + c[0]
print(f"Après échange : {nouvelle}")
Trace pour c = "python" :
c[-1] → "n" (dernier caractère)milieu → "ytho" (les caractères d’indice 1 à 4, ajoutés un à un par la boucle)c[0] → "p" (premier caractère)"nythop"Écrire un programme qui compare la longueur de deux chaînes de caractères saisies par l’utilisateur et affiche un message adapté à chaque cas.
len donne la longueur de chaque chaîne ; trois cas à distinguer avec if, elif et else.
c1 = input("Première chaîne : ")
c2 = input("Deuxième chaîne : ")
if len(c1) > len(c2):
print(f"'{c1}' est plus longue ({len(c1)} contre {len(c2)})")
elif len(c1) < len(c2):
print(f"'{c2}' est plus longue ({len(c2)} contre {len(c1)})")
else:
print(f"Les deux chaînes ont la même longueur ({len(c1)})")
Soit la chaîne c = "abcdef". Insérer le caractère "," entre chaque caractère de la chaîne c.
Résultat attendu : "a,b,c,d,e,f"
Partir du premier caractère, puis, pour chacun des suivants, ajouter une virgule et ce caractère.
c = "abcdef"
resultat = c[0]
for i in range(1, len(c)):
resultat = resultat + "," + c[i]
print(resultat) # "a,b,c,d,e,f"
On part du premier caractère, puis on ajoute, pour chacun des suivants, une virgule et le caractère. Le chapitre Listes présente la méthode join(), qui fait ce travail en une seule instruction.
Initialisez la variable s en lui affectant la chaîne "abc".
Utilisez une fonction native de Python pour déterminer sa longueur.
Écrivez une séquence d’opérations qui permet de transformer "abc" en "aaabbbccc".
L’opérateur * répète une chaîne : "a" * 3 vaut "aaa". Parcourir s caractère par caractère et accumuler le résultat dans une nouvelle chaîne.
s = "abc"
# 1. Longueur
print(len(s)) # 3
# 2. Transformation en "aaabbbccc"
resultat = ""
for caractere in s:
resultat = resultat + caractere * 3
print(resultat) # "aaabbbccc"
Explication : on parcourt chaque caractère de s et on le répète trois fois grâce à l’opérateur *. La concaténation accumule le résultat.
Initialisez la variable s en lui affectant la chaîne "aaabbbccc".
Utilisez une méthode pour trouver la première occurrence de "b" puis la première occurrence de "ccc".
La méthode find de l’exercice 4.1 accepte aussi une chaîne de plusieurs caractères.
Utilisez une méthode pour remplacer tous les "a" par des "X", puis pour ne remplacer que le premier "a" par "X".
Indication : la méthode replace() accepte un troisième argument facultatif ; s.replace(a, b, n) ne remplace que les n premières occurrences de a.
s = "aaabbbccc"
# 1. Recherche
print(s.find("b")) # 3 (première occurrence de "b")
print(s.find("ccc")) # 6 (première occurrence de "ccc")
# 2. Remplacement
print(s.replace("a", "X")) # "XXXbbbccc" (tous les "a")
print(s.replace("a", "X", 1)) # "Xaabbbccc" (seulement le premier)
Point important : replace() ne modifie pas la chaîne originale (les chaînes sont immuables), elle renvoie une nouvelle chaîne. Le troisième argument optionnel limite le nombre de remplacements.
Transformez la chaîne "aaa bbb ccc" en chacune des chaînes suivantes :
"AAA BBB CCC""AAA bbb CCC"Chercher dans le cours la méthode qui met une chaîne en majuscules. Pour la seconde chaîne, appliquer replace aux seuls mots à changer : chaque appel renvoie une nouvelle chaîne, à laquelle on peut appliquer un autre replace.
s = "aaa bbb ccc"
# 1. Tout en majuscules
print(s.upper()) # "AAA BBB CCC"
# 2. Seulement "aaa" et "ccc" en majuscules
resultat = s.replace("aaa", "AAA").replace("ccc", "CCC")
print(resultat) # "AAA bbb CCC"
Chaque appel à replace() renvoie une nouvelle chaîne, sur laquelle on applique le remplacement suivant.