Je souhaite trouver les nombres premiers dans une liste avec les spécifications suivantes: A) Si les chiffres sont prêts, le code doit imprimer "[numéro] est un nombre premier." B) Si le nombre n'est pas un nombre premier, il devrait imprimer "[numéro] n'est pas un nombre premier" et un facteur de ce numéro, autre que 1 et le nombre lui-même: "[facteur] est un facteur de [nombre ] ".
check_prime = [26, 39, 51, 53, 57, 79, 85].
for num in check_prime:
for i in range(2, num):
if (num % i) == 0:
print("{} is NOT a prime number, because {} is a factor of {}".format(num, i, num))
break
if i == num -1:
print("{} IS a prime number".format(num))
3 Réponses :
La réponse est que plage (2, num) code> génère des numéros à partir de 2 jusqu'à num-1 code> car plage (0, n) code > Génère des nombres en général de 0 à N-1. Donc, votre i code> fonctionnera de 2 à num-1 code>. C'est pourquoi vous vérifiez si i == num -1: code> Pour voir si toutes les valeurs de i code> ont été utilisées pour vérifier le numéro principal. P>
C'est ce code bâclé.
La logique est que le nombre est prime si et seulement si vous avez suivi tous les facteurs possibles inférieurs au nombre. Dans ce cas, Il existe de meilleurs moyens de déterminer si un nombre est élevé. Vous pouvez rechercher "Trémates Prime Python" et obtenir de nombreux hits avec un meilleur code et une logique plus simple. P> Par exemple, c'est plus clair: P> i == num-1 code>. P> import math
check_prime = [26, 39, 51, 53, 57, 79, 85].
for num in check_prime:
is_prime = True
for i in range(2, int(num**0.5) + 1):
if (num % i) == 0:
is_prime = False
break
if is_prime:
print("{} IS a prime number".format(num))
else:
print("{} is NOT a prime number, because {} is a factor of {}".format(num, i, num))
MATH.SQRT CODE> retourne un flotteur, mais plage code> nécessite des arguments entier. Vous pouvez également effectuer une racine carrée sans aucune importation avec num ** 0.5 code>. De plus, is_prime code> définit essentiellement un drapeau pour voir si la boucle s'arrête avec un BAISE CODE>, qui est ce que pour..else code> fait fondamentalement.
Puisque la boucle interne iTerate Alternativement, vous pouvez utiliser le i code> sur plage (2, num) code>, i code> deviendrait num - 1 code > En fin de compte si la boucle ne rencontre pas un break code> en raison de la recherche d'un diviseur, ce qui est déterminé qu'un nombre premier est déterminé. pour-ele Construction Pour atteindre l'objectif de déterminer que le numéro est une prime uniquement si la boucle ne rencontre pas un break code> d'une manière plus propre: p> for num in check_prime:
for i in range(2, num):
if (num % i) == 0:
print("{} is NOT a prime number, because {} is a factor of {}".format(num, i, num))
break
else:
print("{} IS a prime number".format(num))
Vous avez raison - la boucle pour la boucle peut avoir un bloc code> code> pour attraper le cas où
pause code> n'est jamais exécuté. Je suppose que la personne qui a écrit ce code ne savait pas cela, alors ils essaient de tester sii code> est arrivé à la dernière étape de la plage. Mais c'est buggy, car sinum code> est2 code> (qui est prime),i code> ne sera jamais incrémenté.