Python Débutant en Boucle (pour Trouver les nombres Premiers)

Je suis vraiment un débutant en python, donc je m'excuse pour le manque de connaissances, mais la raison pour laquelle je demande, c'est que la lecture de l'Python manuel et tutoriel (http://docs.python.org/2.7/tutorial) je ne suis pas totalement incapable de comprendre la façon dont les boucles de travail. J'ai écrit des programmes simples donc je pense que j'ai les bases mais pour quelque raison que ce programme, qui est destinée à la liste de tous les nombres premiers inférieurs ou égaux à n, est pas de travail:

n = int(raw_input("What number should I go up to? "))
p = 2
while p <= n:
        for i in range(2, p):
                if p%i == 0:
                        p=p+1 
        print "%s" % p,
        p=p+1
print "Done"

La sortie quand je rentre par exemple 100:

2 3 5 7 11 13 17 19 23 27 29 31 35 37 41 43 47 53 59 61 67 71 73 79 83 87 89 95 97 101 Done

Qui ressemble presque à un droit, mais pour une raison quelconque contient 27, 35, 95, qui sont en composite de cours. J'ai essayé de faire ressortir la façon dont ma boucle fonctionne, mais je ne vois pas où il ignore la vérification de divisibilité tout d'un coup. J'ai pensé que si quelqu'un avait un regard qu'ils pouvaient m'expliquer ce que sur la syntaxe en est la cause. Merci beaucoup!

P. S. j'ai déjà réussi à écrire un programme qui fait la même chose à l'aide d'une boucle sur le dessus au lieu d'une boucle while. J'essayais simplement d'obtenir une compréhension profonde de la façon dont cela fonctionne; donc je ne suis pas vraiment à la recherche de suggestions sur les différentes façons de le faire (si si vous avez quelques belles idées, j'aimerais que trop!)
Ce n'est pas que pour la boucle est mal - à- l'algorithme est. Avez-vous essayé de l'exécution de ce papier? Si il vous donne le même (mauvais) résultats, vous êtes à la compréhension de la boucle correctement, mais l'algorithme est faux
Eh bien, je pense que l'algorithme fonctionne sur le papier: au moins, si ce que je suis en cours d'exécution sur le papier est ce que j'ai écrit en python. Lorsque p devient avancé pour 27 par exemple, la je boucle devriez trouver que p est divisible par 3 lorsque la je boucle atteint 3, et alors p doit être parcouru avec impatience 28. Pourriez-vous m'aider à comprendre où l'écart entre ma compréhension et de ce que j'ai écrit?
et puis vous commencez à vérifier si 28 est divisible par 4, alors i va à 5, et vous vérifiez si 29 est divisible par 5, mais vous ne jamais vérifier le numéro de moins de 5.

OriginalL'auteur | 2013-02-01