0
votes

Python - Évitez les répétitions inutiles pour la boucle

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 commentaires

La partie sinon n'est pas redondante; C'est incorrect. Il pourrait imprimer x n'a pas de diviseur ... 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 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 le pour 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).


5 Réponses :


0
votes

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


0 commentaires

0
votes

Gardez un Comptez pour les diviseurs et vérifiez à la fin si elle est égale à zéro. xxx


1 commentaires

Cela semble très optimal, merci. Quel est le rôle de comptage à l'intérieur de la déclaration exactement?



0
votes

Pourquoi pas simplement faire une liste de diviseurs et qu'en ajoute uniquement si c'est. xxx

sortie: xxx


0 commentaires

0
votes

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: xxx


0 commentaires

0
votes

Complexité de la plage (2, nombre) est o (numéro) .

alors que nous pouvons optimiser la même chose à O (sqrt (numéro) ) comme suit: xxx

référence: https://www.geeksforgeeks.org/find-divisors-natural-number-set-1/


0 commentaires