Aller au contenu principal

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")