J'ai un problème de compréhension de la manière d'éviter la répétition #Redundante dans les boucles. Ce programme a l'intention d'imprimer les diviseurs du nombre dans la plage 2 et Number CODE>: number = int(input('Enter an integer: '))
for divisor in range (2, number):
if number % divisor == 0:
print (divisor)
else:
print (number, 'has no divisors in the range')
5 Réponses :
Dans cette approche, vous avez besoin d'une variable supplémentaire pour suivre la trace s'il y avait un diviseur ou non. L'indentation de votre bloc sinon code> doit également être supprimée. Regardez ce code: number = int(input('Enter an integer: '))
is_divisor_found = False
for divisor in range(2, number):
if number % divisor == 0:
is_divisor_found = True
print(divisor)
if not is_divisor_found:
print(number, 'has no divisors in the range')
Gardez un Comptez code> pour les diviseurs et vérifiez à la fin si elle est égale à zéro.
Cela semble très optimal, merci. Quel est le rôle de comptage à l'intérieur de la déclaration exactement?
Pourquoi pas simplement faire une liste sortie: p> code> de diviseurs et qu'en ajoute uniquement si c'est.
Je suggérerais d'économiser un drapeau booléen qui vous dit si vous avez trouvé un diviseur pendant la boucle ou non. Quelque chose comme:
Complexité de la plage alors que nous pouvons optimiser la même chose à référence: https://www.geeksforgeeks.org/find-divisors-natural-number-set-1/ P> P> (2, nombre) code> est o (numéro) code>. O (sqrt (numéro) ) code> comme suit: p>
La partie
sinon code> n'est pas redondante; C'est incorrect. Il pourrait imprimerx n'a pas de diviseur ... code> même s'il y a.Mais si un chiffre n'a pas de diviseurs comme 5, comment je peux l'imprimer une fois que pas 4 fois !?
Comme je l'ai dit, le problème est pas i> l'imprimer plusieurs fois. Vous ne devriez pas l'imprimer du tout, jusqu'à ce que tous les diviseurs potentiels soient épuisés. C'est-à-dire que vous devez l'imprimer à l'extérieur i> le
pour code> boucle.Mais j'ai essayé de l'imprimer à l'extérieur. Ce qui se passe maintenant, c'est que chaque fois qu'il trouve des diviseurs d'un numéro, il imprime une ligne redondante de (nombre, "n'a pas de diviseur dans la gamme") à la fin. Comment éviter cela?
Voir toutes les excellentes réponses données ci-dessous (et acceptez celui qui aide le plus).