2014-12-12 2 views
-2

Я делаю быструю программу, которая будет запрашивать у пользователя номеров, а затем выводить все простые числа до этого числа:Печати простых чисел до ввода пользователя

n=int(input("Enter a number: ")) 
a=2 
if n<=1: 
    n=int(input("Enter another number: ")) 
while a<n: 
    for i in range(2,n): 
     if a%i==0: 
      break 
     else: 
      print (a) 
      break 
    a=a+1 

Проблемы я имею что он не распечатает 2. Например, если я использую 20 как мой n значение, он будет печатать:

Enter a number: 20 
3 
5 
7 
9 
11 
13 
15 
17 
19 
+2

У вас есть другие проблемы, 9 и 15 не являются первыми. – Andrey

+0

В вашем цикле 'for' вы используете' break' для '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ', который будет выполняться только один раз (' for i = 2'). Короче говоря, вы проверяете divisiblity на '2', который не будет удовлетворен нечетными числами. Вот почему вы получаете все нечетные числа. –

ответ

1

У вас есть две ошибки:

  1. else некорректно отступом, поэтому он сидит с if а не for (вы хотите printесли все значения ниже a не являются факторами a, не на первом, который не является); и

  2. Ваш внутренний range идет до n, не a (так всегда включает в себя a и a % a == 0).

Это будет работать:

for a in range(2, n): 
    for i in range(2, a): 
     if a % i == 0: 
      break 
    else: 
     print(a) 

Примечание Я использовал for цикл, чтобы заменить внешний while, который обычно лучше, когда вы уже знаете, где остановиться. Вы можете сделать код более эффективным, установив квадратный корень из a и оставив четные цифры, кроме 2, но я оставлю эти оптимизации вам.

+0

Спасибо за это – Pudie12

0

Вы можете запустить цикл с 1

Ваш цикл будет начинаться с 1, следовательно, вы получите 2 на выходе.