Aller au contenu principal

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