Corrigé - Atelier 8 - Imbrication
Essayez de faire l'atelier avant de consulter ce corrigé.
Compréhension
Numéro 1
1 1
1 2
2 1
2 2
3 1
3 2
Numéro 2
Version A:
---
2 est pair
---
---
4 est pair
---
Version B:
2 est pair
---
4 est pair
---
Numéro 3
Retrait effectué, solde: 70
Retrait effectué, solde: 40
Retrait effectué, solde: 10
Numéro 4
1 1 diagonale
2 2 diagonale
3 3 diagonale
Écriture
Numéro 5
for i in range(1, 6):
for j in range(1, 6):
print(f"{i} x {j} = {i * j}")
print()
Numéro 6
Version avec un bool:
TAILLE: int = 5
estX: bool = True
for i in range(TAILLE):
for j in range(TAILLE):
if estX:
print("X", end="")
else:
print("O", end="")
estX = not estX
print()
Version avec le modulo sur la position (i + j):
TAILLE: int = 5
ligne: str
for i in range(TAILLE):
ligne = ""
for j in range(TAILLE):
if (i + j) % 2 == 0:
ligne += "X"
else:
ligne += "O"
print(ligne)
Version avec l'opérateur ternaire:
TAILLE: int = 5
ligne: str
for i in range(TAILLE):
ligne = ""
for j in range(TAILLE):
ligne += "O" if (i + j) % 2 else "X"
print(ligne)
Numéro 7
limite: int
limite = int(input("Entrez une limite: "))
if limite > 0:
for i in range(2, limite + 1, 2):
print(i)
else:
print("La limite doit être positive")
Numéro 8
nombre: int
compte: int = 0
nombre = int(input("Entrez un nombre: "))
for i in range(1, nombre + 1):
if nombre % i == 0:
print(f"{i} est un diviseur de {nombre}")
compte += 1
print(f"Nombre de diviseurs: {compte}")
Numéro 9
nombre: int
estPremier: bool = True
nombre = int(input("Entrez un nombre: "))
for i in range(2, nombre):
if nombre % i == 0:
estPremier = False
if estPremier:
print(f"{nombre} est premier")
else:
print(f"{nombre} n'est pas premier")
Numéro 10
Version for à l'extérieur, while à l'intérieur:
nombre: int
resultat: int
i: int
nombre = int(input("Entrez un nombre: "))
for n in range(1, nombre + 1):
resultat = 1
i = n
while i > 0:
resultat *= i
i -= 1
print(f"{n}! = {resultat}")
Version while à l'extérieur, for à l'intérieur:
nombre: int
resultat: int
n: int = 1
nombre = int(input("Entrez un nombre: "))
while n <= nombre:
resultat = 1
for i in range(n, 0, -1):
resultat *= i
print(f"{n}! = {resultat}")
n += 1
Numéro 11
VIE_INITIALE: int = 100
SEUIL_ALERTE: int = 20
vie: int = VIE_INITIALE
tour: int = 0
degats: int
while vie > 0:
tour += 1
degats = int(input("Dégâts subis ce tour: "))
vie -= degats
if vie <= 0:
print(f"Game Over après {tour} tours")
elif vie <= SEUIL_ALERTE:
print(f"Attention, vie faible! Vie restante: {vie}")
else:
print(f"Vie restante: {vie}")
Numéro 12 - Défi
limite: int
estPremier: bool
limite = int(input("Entrez une limite: "))
for nombre in range(2, limite + 1):
estPremier = True
for diviseur in range(2, nombre):
if nombre % diviseur == 0:
estPremier = False
if estPremier:
print(f"{nombre} est premier")
Analyse
Numéro 13
compte += 1 est indenté au niveau du for, il s'exécute donc à chaque tour au lieu de seulement lorsque i est pair. Le résultat affiche 10 pairs au lieu de 5. Il faut l'indenter au niveau du if:
total: int = 0
compte: int = 0
for i in range(1, 11):
if i % 2 == 0:
total += i
compte += 1
print("Somme:", total)
print("Nombre de pairs:", compte)
Numéro 14
La borne de la boucle intérieure range(1, i) dépend de i, ce qui donne une table incomplète (chaque ligne a de moins en moins de colonnes) au lieu d'une table complète de 1 à 5. Il faut une borne fixe:
for i in range(1, 6):
for j in range(1, 6):
print(i, "x", j, "=", i * j)
Numéro 15
Le code fonctionne correctement, mais les deux if imbriqués peuvent être combinés en une seule condition avec and:
temperature: int = 25
ensoleille: bool = True
if temperature > 20 and ensoleille:
print("Journée parfaite pour une randonnée")