2016-03-14 3 views
-3

Я прошу создать метод, который называется primes(x), который возвращает обратно список, содержащий все простые числа, начиная с 2 до x.Я не знаю, почему он не печатает 2 и 3

Вот мой код:

def primes(x): 
    i = 2 
    while(i < x): 
     j = 2 
     while(j <= (i/j)): 
      if not(i%j): 
       break 
      j = j + 1 
      if (j > i/j): 
       print(i, " is prime") 
     i = i + 1 

Ожидается, что печатать:

>>> primes(50) 
(2, ' is prime') 
(3, ' is prime') 
(5, ' is prime') 
(7, ' is prime') 
(11, ' is prime') 
(13, ' is prime') 
(17, ' is prime') 
(19, ' is prime') 
(23, ' is prime') 
(29, ' is prime') 
(31, ' is prime') 
(37, ' is prime') 
(41, ' is prime') 
(43, ' is prime') 
(47, ' is prime') 

Однако не печатали 2 и 3, он только напечатал:

(5, ' is prime') 
(7, ' is prime') 
(11, ' is prime') 
(13, ' is prime') 
(17, ' is prime') 
(19, ' is prime') 
(23, ' is prime') 
(29, ' is prime') 
(31, ' is prime') 
(37, ' is prime') 
(41, ' is prime') 
(43, ' is prime') 
(47, ' is prime') 
+0

не ваша проблема, но замечания общего характера: вам не нужны скобки ('(' и ')') в Python при использовании операторов 'if' или' while'. 'if j> i/j:' и 'while i Carpetsmoker

ответ

2

Именно эта линия:

while(j <= (i/j)): 

Когда i равно 2 или 3, начальное значение j = 2 приводит к тому, что условие в первый раз будет считаться ложным.

0

В while(j <= (i/j)), когда i составляет 2 или 3, цикл while не активируется.

0

Ttake взгляд на

i = 2 
while(i < x): 
    j = 2 
    while(j <= (i/j)): 

Поскольку j = 2 больше i/j, я только увеличивается и не печатается. То же самое для i = 3.

0

если проблема напечатать 2 и 3, а затем, так это легкий путь;)

def primes(x): 
    i = 2 
    print(2, " is prime") 
    print(3, " is prime") 

    while(i < x): 
     j = 2 

     while(j <= (i/j)): 
      if not(i%j): 
       break 
      j = j + 1 
      if (j > i/j): 
       print(i, " is prime") 
     i = i + 1 
+0

Если 'x' меньше 3, он все равно будет печатать 2 и 3 для простых чисел. – Reti43

Смежные вопросы