Exercice: boucles imbriquées
Fermémamiemando Messages postés 33093 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 mai 2024 - 30 nov. 2022 à 15:41
- Exercice: boucles imbriquées
- Triangle des textures exercice corrigé - Forum Loisirs / Divertissements
- Exercice word avec corrigé - Forum Word
- Exercice informatique cm2 pdf ✓ - Forum Études / Formation High-Tech
- Exercice d'expression écrite cm2 gratuit - Télécharger - Éducatifs
- Pert exercice corrigé pdf ✓ - Forum Windows
1 réponse
Modifié le 30 nov. 2022 à 15:51
Bonjour,
Par rapport à ton message
Merci de partager ton code comme expliqué ici
Par rapport au code proposé
Il y a de nombreuses choses qui ne vont pas :
- l2 : tu crées une chaîne de caractère pour préparer le résultat, or ce type est inadapté. Il vaudrait mieux utiliser une liste
- l4-5 : si le but est de démarrer à inferieur = 1, tu devrais simplement écrire for inferieur in range(1, n)
- l5 : cette ligne ne sert à rien car tu ne fais rien du résultat de ce test.
- ton programme ne teste pas si diviseur est un diviseur de inferieur.
Par rapport au problème posé
Tu devrais peut être par écrire sur le papier ce que ton programme doit faire pour :
- tester si d est un diviseur de n
- lister les diviseurs de n
- tester si n est premier
Chacun de ces trois points peut correspondre à une fonction. Une fonction écrite, tu peux la réutiliser pour construire les fonctions restantes. Une fois cette étape préliminaire claire dans ta tête, passe au code.
En découpant le problème ainsi, ce sera plus lisible, plus facile à écrire, et tu n'auras pas besoin de faire des boucles imbriquées. Tu pourras toujours tout rassembler dans une même fonction a posteriori si tu veux vraiment le faire avec des boucles imbriquées.
Voici à quoi pourrait ressembler cette étape préliminaire
- L'opération n % d retourne le reste de la division euclidienne de n par d. Donc si n % d == 0, alors d divise n.
- Pour lister les diviseurs de n, il suffit d'itérer sur les valeurs allant de 1 à math.sqrt(n). Si le test précédent est vrai, on ajoute d à la liste des résultats.
- Pour tester si n est premier
- Si n == 0 ou n == 1
- On renvoie False.
- Si n >= 2, il suffit de chercher ses diviseurs.
- Dès qu'on en trouve plus que 2, on sait que n n'est pas premier et on renvoie False.
- Si on en a trouvé que deux (1 et n), alors n est premier et on renvoie True.
- Si n == 0 ou n == 1
Pour t'aider à démarrer voici comment traduire en python les deux premières fonctionnalités :
import math def est_divisible(n: int, d: int) -> bool: return n % d == 0 def diviseurs(n: int) -> iter: return ( d for d in range(1, n + 1) if est_divisible(n, d) ) def est_premier(n: int) -> bool: # CODE A COMPLETER return True l = list(diviseurs(10)) print(l) # Affiche [1, 2, 5, 10] print(est_premier(10)) # Doit afficher False une fois le code complété print(est_premier(7)) # Doit afficher True une fois le code complété
Bonne chance