2014-02-20 27 views
1

У меня есть вопрос относительно цикла for-else в другом цикле. Так вот пример:For-Else loop in another For loop

primelist = [] 
for p in range (2, x+1): 
    print 'in first for' 
    raw_input() 
    for i in range(2, p): 
     print 'in second for' 
     if p%i == 0: 
      print 'in if' 
      raw_input() 
      break 
    else: 
     print 'in else' 
     raw_input() 
     primelist = primelist + [p] 
return primelist 

Как вы видите, это для определения простых чисел и хранить их в список, так что они могут быть восстановлены позже. Поэтому моя проблема связана с первым циклом. Когда я запускаю программу, она вводится следующим образом: Первый цикл FOR, ELSE, First FOR цикл, второй цикл FOR и т. Д. Почему он первый раз переходит к ELSE? Кроме того, если я попрошу 1000 числа я получаю: 7919 с

for i in range(2, p) 

и 7907 с

for i in range(2, p/2). 

Почему? Надеюсь, вы поможете мне в этом, но, пожалуйста, не давайте других методов для реализации алгоритма Prime Number!

+0

Как вы его написали, этот код имеет синтаксическую ошибку. Вы имели в виду, чтобы выражение 'else' (и его дочерние элементы) было встроено в оператор' if'? – Hooked

+2

@Hooked Вы можете 'else'' for' в Python. Условие вводится, если цикл завершается без 'break'ing. –

+0

@SilasRay ничего себе, я этого не понимал. Моя ошибка BlackTM. Я оставлю свой комментарий для других, чтобы учиться. – Hooked

ответ

1

Python's range не включает конечное значение.

range[start, end) 

Таким образом, в первой итерации значение p будет 2 и range(2, 2) является пустым списком. Вот почему другая часть введена.

print range(2, 2) # [] 
+0

Я вижу. Спасибо! – BlackTM