编写程序, 输入一个大于 2 的自然数, 然后输出小于该数字的所有素数组成的列表

编写程序, 输入一个大于 2 的自然数, 然后输出小于该数字的所有素数组成的列表
import math
n=eval(input())
s=[]
a=2
for i in range(2,n):
s.append(i)
c=math.sqrt(n)
c=int(c)
while a<n:
for i in range(2,c+1):
if a % i==0:
s.remove(a)
a=a+1
s.insert(0,2)
print(s)

这个只能输出2到八中的素数,如果n=9以上之后就会报错,想问一下问题在哪里

因为问题出在这句:

s.remove(a)

在下面加 break 就好了。原因就是 a % i == 0 可能会触发多次,但是 remove 掉一个目标数字之后再次 remove,没有这个数字,所以会报错。


完整代码:

import math

n = eval(input())
s = []
a = 2
for i in range(2, n):
    s.append(i)
c = math.sqrt(n)
c = int(c)
while a < n:
    for i in range(2, c + 1):
        if a % i == 0:
            s.remove(a)
            break
    a = a + 1
s.insert(0, 2)
print(s)

希望给个采纳,谢谢。

a = eval(input("输入一个自然数:"))
if a > 2:
    l1 = []
    for i in range(2, a):
        count = 0
        for v in range(2,i):
            if i % v == 0:
                break
            else:
                count += 1
        if count > i-3:
            l1.append(i)
    print(l1)