2014-04-30 1 views
0

Je suis python apprendre et cherchait à ce problème: Python - Prime Number exercise Voici mes questions: Lorsque n = 2, la gamme sera (2, n), dans le En d'autres termes, la plage est comprise entre 2 et 2-1 = 1.Python: nombres premiers et dans la gamme()

for x in range(2, n): 
     if n % x == 0: 
     print("{} equals {} x {}".format(n, x, n // x)) 
     return False 
    else: 
     print(n, "is a prime number") 
     return True 

a. Sera-ce 2% 2?

b. Si le nombre est encore, il imprimera

A est égal à B x C

sera la rupture de la boucle une fois que la condition est vraie ou il va finir la boucle?

c. est l'autre en dehors de la boucle? Que faire si la déclaration correspond-elle? (Je sais que c'est le if n % x == 0:) mais comment cela semble-t-il être en dehors de la boucle? J'ai essayé de l'exécuter, et de comprendre, mais ensuite je me suis trompé.

+0

Veuillez corriger le formatage de votre code, c'est important. Je suppose, le 'else' doit être au même niveau que' for' –

Répondre

3

pour .. autre confusion

Vous semblez confondre par else qui fait partie de la boucle for.

Vous n'êtes pas le seul.

En Python, la boucle for peut avoir à la section fin else, qui est exécuté après toutes les boucles sont terminées, à moins qu'il y avait déclaration break. Oui, ce n'est pas très intuitif.

Vous allez donc lire la section else comme dernière partie de la boucle for.

def looptest(loops=5): 
    for i in range(loops): 
     print "i", i 
     if i == 3: 
      print "in if" 
      return 
    else:  
     print "in else of the loop" 

et essayer pour les boucles == 5:

>>> looptest(5) 
i 0 
i 1 
i 2 
i 3 
in if 

Pour nombre de boucles 2 nous ne prévoyons pas de retour, nous allons courir à travers else de la boucle:

>>> looptest(2) 
i 0 
i 1 
in else of the loop 

Notez, que return doit être dans la fonction, essayer de retourner sur la console entraînerait une erreur.

gamme (2, 2) == []

Essai sur la console python:

>>> range(2, 2) 
[] 

retour

retour finit par fonction en cours ou exécuté dans l'ensemble du module. Donc, après return, aucun autre code dans la même partie de votre code n'est exécuté (avec des exceptions comme try, finally, les gestionnaires de contexte etc, mais ce n'est pas pertinent pour votre code).

+0

Que diriez-vous de la gamme? et je suis confus avec la déclaration de retour. – eLg

+0

@eLg: mise à jour de ma réponse avec 'range' et' return' –

+0

Selon ce site: [link] (https://docs.python.org/3.3/tutorial/controlflow.html), "la clause else appartient à la boucle for, pas l'instruction if " – eLg

1

a. Le numéro range(2,2) est un ensemble vide en Python.

b. Dès que la condition est vraie, la fonction qui contient la boucle retournera, et la boucle ne se terminera pas.C'est parce que l'appel return est un niveau bas de l'instruction if.

c. Je suis sûr que vous voulez que le else corresponde au for. Python a cette syntaxe pour ... else qui exécute le contenu de la clause else si la boucle for se termine normalement (c'est-à-dire sans break).

En d'autres termes, je pense que vous voulez ceci:

for x in range(2, n): 
     if n % x == 0: 
      print("{} equals {} x {}".format(n, x, n // x)) 
      return False 
else: 
    print(n, "is a prime number") 
    return True 

EDIT:

Bien sûr, je peux expliquer la boucle entière. L'idée est la suivante: pour chaque nombre entre deux et n, vérifiez si ce nombre est un facteur de x. Si c'est le cas, alors n n'est pas premier, et on tue la boucle. Cependant, si nous faisons tout le chemin jusqu'à la fin de la boucle, nous savons que n est premier, car il n'a aucun facteur entre 2 et n. La clause else entre alors dans, et imprime que le nombre est premier.

1

Jetez un oeil à cette fonction:

def isPrime(n): 
    for i in range(2, int(n**0.5) + 1): 
     if n % i ==0: 
      return False 
    return True 

Itère toutes les options possibles est pas nécessairement la meilleure option; Gardez à l'esprit que la portée ne sera jamais supérieure à la racine carrée du nombre.

Notez également que votre sortie imprime uniquement le premier ensemble de facteurs.

+0

Je suis confondu avec le retour Vrai, et retourne Faux – eLg

+0

donc notre boucle for vérifie chaque nombre entre 2 et le sqrt de notre numéro. Le faux sort «tôt» si vous voulez; dès qu'un facteur est trouvé disant 'Ce nombre a des facteurs!'; Si la boucle for finit et n'a jamais trouvé de facteur, la fonction renvoie True en disant 'Ceci est un nombre premier!' – crownedzero

+0

Je veux juste vérifier. Si la condition if est vraie, elle retournera false et la boucle se rompra/quittera/stoppera. Si la condition est fausse, elle retournera vrai et la boucle continuera. – eLg

Questions connexes