Corrigé - Atelier 7 - While
Essayez de faire l'atelier avant de consulter ce corrigé.
Compréhension
Numéro 1
Affiche 0, 1, 2, 3, 4 (un par ligne).
Numéro 2
A : n = 6, p = 1
B : n = 6, p = 3
Dans le cas A, p += 1 est en dehors du while (mauvaise indentation), il ne s'exécute donc qu'une seule fois après la fin de la boucle. Dans le cas B, p += 1 est à l'intérieur du while, il s'exécute à chaque itération.
Numéro 3
13 12
Numéro 4
- 8 et 9 : le nombre de tours dépend de la somme accumulée, connue seulement en cours d'exécution.
- 11 : le nombre de tours dépend de ce que l'utilisateur entre, inconnu à l'avance.
- 14 et 15 : l'algorithme d'Euclide (PGCD) répète le modulo jusqu'à obtenir un reste de 0, le nombre d'étapes dépend des valeurs et n'est connu qu'en cours de route.
- 16 : sans convertir en string ni utiliser
len, il n'y a pas de moyen simple de connaître le nombre de chiffres avant de commencer à les extraire un à un. - 18 : le nombre d'étapes de la suite de Syracuse dépend des valeurs calculées à chaque tour, impossible à prédire avant de les calculer.
Écriture
Numéro 5
i: int = 1
while i <= 10:
print(i)
i += 1
Version avec les tirets: attention, end=" - " ajoute aussi un tiret après le dernier nombre.
i: int = 1
while i <= 10:
print(i, end=" - ")
i += 1
Numéro 6
i: int = 5
while i <= 100:
print(i)
i += 5
Numéro 7
total: int = 0
i: int = 1
while i <= 100:
total += i
i += 1
print(f"La somme de tous les nombres entre 1 et 100: {total}")
Numéro 8
total: int = 0
i: int = 1
while total <= 1000:
total += i
i += 1
print(f"Réponse: {total}")
Numéro 9
Il faut vérifier avant d'ajouter, pour ne pas dépasser 1000:
total: int = 0
i: int = 1
while total + i <= 1000:
total += i
i += 1
print(f"Réponse: {total}")
Numéro 10
nombre: int
resultat: int = 1
i: int = 1
nombre = int(input("Veuillez entrer un nombre: "))
while i <= nombre:
resultat = resultat * i
i += 1
print(f"{nombre}! = {resultat}")
Numéro 11
import math
nombre: int
nombre = int(input("Entrez un entier positif: "))
while nombre != 0:
if nombre < 0:
print("Un entier positif svp!")
else:
print(f"Sa racine carrée est: {math.sqrt(nombre)}")
nombre = int(input("Entrez un entier positif: "))
print("Fin")
Numéro 12
hauteur: int
i: int = 1
hauteur = int(input("Combien de lignes? "))
while i <= hauteur:
print("*" * i)
i += 1
Numéro 13
nombre1: int
nombre2: int
resultat: int = 0
i: int = 0
nombre1 = int(input("Veuillez entrer un nombre: "))
nombre2 = int(input("Veuillez entrer un nombre: "))
while i < nombre2:
resultat += nombre1
i += 1
print(f"{nombre1} * {nombre2} = {resultat}")
Numéro 14
n1: int
n2: int
a: int
b: int
reste: int
n1 = int(input("Veuillez entrer un nombre: "))
n2 = int(input("Veuillez entrer un nombre: "))
a = n1
b = n2
while b != 0:
reste = a % b
a = b
b = reste
print(f"Le PGCD de {n1} et {n2} est {a}")
n1 et n2 doivent être gardés intacts pour le message final, puisque a et b sont modifiés à chaque itération de l'algorithme d'Euclide.
Numéro 15
Réutilise l'algorithme d'Euclide du numéro précédent, le PPCM s'obtient avec n1 * n2 // pgcd:
n1: int
n2: int
a: int
b: int
reste: int
pgcd: int
ppcm: int
n1 = int(input("Veuillez entrer un nombre: "))
n2 = int(input("Veuillez entrer un nombre: "))
a = n1
b = n2
while b != 0:
reste = a % b
a = b
b = reste
pgcd = a
ppcm = n1 * n2 // pgcd
print(f"Le PPCM de {n1} et {n2} est {ppcm}")
Numéro 16
nb: int
nombreOriginal: int
inverse: int = 0
nb = int(input("Veuillez entrer un nombre: "))
nombreOriginal = nb
while nb != 0:
inverse = inverse * 10 + nb % 10
nb = nb // 10
print(f"L'inverse de {nombreOriginal} est {inverse}")
Analyse
Numéro 19
La boucle est infinie, i n'est jamais modifié, la condition i <= 5 reste toujours vraie. Il manque i += 1:
i: int = 1
while i <= 5:
print(i)
i += 1
Numéro 20
i < 10 exclut le 10, la somme obtenue est 45 au lieu de 55. Il faut i <= 10:
total: int = 0
i: int = 1
while i <= 10:
total += i
i += 1
print(total)
Numéro 21
Le code fonctionne correctement, mais la variable fini et le if sont inutiles (compteur n'est même pas utilisé). La condition du while peut directement vérifier n:
n: int = 5
while n > 0:
print(n)
n -= 1
print("GO")