Exercice — traduire, évaluer, implémenter (séries de préparation à l'épreuve pratique)
On considère la chaîne ch qui contient "Examen 2026" ; ses indices commencent à 0.
1. Recopier et compléter le tableau suivant en écrivant l'instruction Python équivalente, le résultat obtenu et son type.
| Instruction algorithmique | Instruction Python | Résultat | Type |
|---|---|---|---|
L ← Long(ch) | |||
s ← Sous_chaine(ch, 0, 6) | |||
p ← Pos("2", ch) | |||
e ← Estnum(Sous_chaine(ch, 7, 11)) | |||
n ← Valeur(Sous_chaine(ch, 7, 11)) + 1 | |||
c ← Convch(n) | |||
m ← Majus(ch) | |||
x ← Aléa(1, 6) |
2. Pour la même chaîne ch, choisir la ou les bonnes réponses.
- a)
ch.find("e")donne : l'entier 0 ; l'entier 4 ; l'entier -1. - b) Pour copier
"Examen", on peut écrire :ch[0:6];ch[:6];ch[1:6]. - c)
int(ch[9])donne : l'entier 2 ; le caractère"2"; l'entier 6. - d)
print(ch[0] * 3)affiche :E*3;EEE; un message d'erreur. - e) Sachant que
Ord("a") = 97etOrd("z") = 122,chr(randint(97, 122))retourne : un entier aléatoire ; une lettre minuscule ; une lettre majuscule.
3. On donne l'algorithme suivant :
Algorithme Chiffres
DEBUT
Répéter
Ecrire("Donner un code : ")
Lire(ch)
Jusqu'à (Long(ch) ≥ 6) ET (Long(ch) ≤ 12)
nb ← 0
Pour i de 0 à Long(ch) - 1 Faire
Si ch[i] ∈ ["0".."9"] Alors
nb ← nb + 1
FinSi
Fin Pour
Ecrire("Nombre de chiffres : ", nb)
FIN- a) Dresser le tableau de déclaration des objets de cet algorithme.
- b) Implémenter cet algorithme en Python.
- c) Qu'affiche le programme pour le code
"Bac2026ok"? Que se passe-t-il si l'utilisateur tape d'abord"ab12"?
Voir la correction commentéeAprès avoir posé votre démarche
1. Idée : numéroter les caractères à partir de 0 — "E" en 0, l'espace en 6, puis "2", "0", "2", "6" aux indices 7 à 10 — et se rappeler que la borne droite d'une tranche est exclue.
| Instruction algorithmique | Instruction Python | Résultat | Type |
|---|---|---|---|
L ← Long(ch) | L = len(ch) | 11 | entier (int) |
s ← Sous_chaine(ch, 0, 6) | s = ch[0:6] | "Examen" | chaîne (str) |
p ← Pos("2", ch) | p = ch.find("2") | 7 | entier |
e ← Estnum(Sous_chaine(ch, 7, 11)) | e = ch[7:11].isdigit() | True | booléen (bool) |
n ← Valeur(Sous_chaine(ch, 7, 11)) + 1 | n = int(ch[7:11]) + 1 | 2027 | entier |
c ← Convch(n) | c = str(n) | "2027" | chaîne |
m ← Majus(ch) | m = ch.upper() | "EXAMEN 2026" | chaîne |
x ← Aléa(1, 6) | x = randint(1, 6) | un entier de 1 à 6 | entier |
randint exige from random import randint ; ses deux bornes sont comprises, comme celles d'Aléa(1, 6).
2. a) L'entier 4 : find distingue majuscules et minuscules ; le E d'indice 0 est majuscule, le premier e minuscule est à l'indice 4. b) ch[0:6] et ch[:6] : la borne 6 est exclue, alors que ch[1:6] donne "xamen". c) L'entier 2 : ch[9] est le caractère "2" (le second 2 de 2026), que int convertit. d) EEE : multiplier une chaîne par 3 la répète trois fois. e) Une lettre minuscule : randint(97, 122) tire un code de 97 à 122, bornes comprises, que chr convertit en une lettre de "a" à "z".
3. a) Tableau de déclaration des objets : ch — chaîne — code saisi ; nb — entier — nombre de chiffres ; i — entier — compteur de la boucle.
b) Idée : Répéter … Jusqu'à (C) devient une boucle while qui tourne tant que C est fausse ; le booléen valide, initialisé à False, force le premier passage comme le test final de Répéter. Pour i de 0 à Long(ch) - 1 devient for i in range(len(ch)), car la borne de range est exclue.
valide = False
while not valide:
ch = input("Donner un code : ")
valide = 6 <= len(ch) <= 12
nb = 0
for i in range(len(ch)):
if "0" <= ch[i] <= "9":
nb = nb + 1
print("Nombre de chiffres :", nb)c) "Bac2026ok" contient 9 caractères, il est accepté ; ses chiffres sont 2, 0, 2 et 6 : le programme affiche Nombre de chiffres : 4. "ab12" ne contient que 4 caractères : valide reste False et la saisie est redemandée.