我正在制作一个快速程序,要求用户输入一个数字,然后将所有素数输出到该数字:
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
答案 0 :(得分:1)
你有两个错误:
else
输入错误,因此它与if
而不是for
一致(如果全部print > a
以下的值不是a
的因子,而不是第一个不是{的}因子;以及
您的内心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
以外的偶数来提高代码效率,但我会将这些优化留给您。
答案 1 :(得分:0)
您可以从1开始循环。
您的循环将从1开始,因此您将获得2输出。