J'ai créé un algorithme de test de primalité simple, mais cela échoue à des chiffres comme 15. Pourquoi?
number = int(input("Test if Prime: ")) print ("Is " + str(number) + " Prime?: ") for i in range (2, number): if number % i == 0: break elif number % i != 0: print ("Yes")
3 Réponses :
Vous avez votre état d'autre à l'intérieur de la boucle. À tout moment de temps, il ne vérifiera qu'une seule valeur ...
Modification de votre boucle Pour imprimer le numéro en vérification: P>
flag = False for i in range (2, number): if number % i == 0: print ("No") flag = True break if (!flag) print("Yes")
le drapeau est juste une variable ... vous pouvez le renommer autre chose. Vous appelez le drapeau comme il s'agit d'un "drapeau" (dans notre cas, il nous dit si un numéro n'est pas prime)
Voici un refacteur rapide que j'ai basé sur votre exemple:
En raison de la mauvaise indentation, sinon sera exécuté pour tous les non-diviseurs de nombres impairs
Je l'ai changé, j'espère que ça ressemble à ce que tu essayais de faire
échoue signifie quand vous entrez 15 mais imprime
oui code> non?
Essayez un
pour ... sinon code>.
@Tserenjamts Oui, mais il imprime "Oui. Non."
@Johnnymopp Yup, été là, ne fonctionne pas (ajouté à la question)
Bien sûr, pour le premier essai
15% 2 == 1 code> de sorte qu'il dit
oui code> alors
15% 3 == 0 code>
non < / Code> Vous devez donc voir un exemple d'algorithmes de nombres premiers, il y en a beaucoup. :))
Exemple: Ideone.com/TSA5WF . Remarque C'est un
pour ... sinon Code>
, passi ... sinon code>.
@Johnnymopps très clair; Merci!
Avez-vous déjà essayé de déboguer? Comparez la sortie de débogage avec ce que vous feriez avec le stylo et le papier.