想打印一组质数却说我列表出错,请问这是什么问题呢?

想要打印100以内的质数,代码撸下:

lists = list(range(3,101))

for i in lists:

for j in range(2,i):

if i%j == 0:

lists.remove(i)

continue

print(lists)

然后就提示:

ValueError: list.remove(x): x not in list

貌似是列项超纲了?可我没发现有什么问题啊?请问要怎么改?


回答:

ValueError: list.remove(x): x not in list的翻译是 值错误: 列表.移除(甲): 甲不在列表中
那么为什么甲不在列表中呢?
一种可能性是甲小于3或者大于100.
另一种可能性是甲在3-100之间,但是之前被删除过一次.

基于这2种可能性, 在lists.remove(i) 之前打印列表和甲, 发现6被删除了2次,并且第二次出现6之后立即就报错了.

那么我们只需要在删除前判断一下, 甲是否在列表中即可

lists = list(range(3, 101))

for i in lists:

for j in range(2, i):

if i % j == 0:

if i in lists:

lists.remove(i)

continue

print(lists)

这段代码还有其他bug, 你自己慢慢看吧.


回答:

非常不建议在数组遍历时,对于数组进行appendremove操作


回答:

思考了一下,感觉lists.remove那里的确有重复删除的问题,于是重新撸了代码,再优化了一下,终于成功了。代码如下:

while True:

n = input("请输入需要挑选出质数的数据范围:")

try:

m = int(n)+1

except ValueError:

if n == "q":

break # 使用“q"来退出交互

else:

print("您的输入有误,请重新输入!")

continue

lists = [2]

sets = set({})

for i in range(3, m):

lists.append(i)

for j in range(2, i):

if i % j == 0: # 先选出合数,然后存进集合中

sets.add(i) # 用集合是为了防止遍历过程中被重复传值

for n in lists:

if n in sets: # 将合数集合中的值与lists中的值相比较

lists.remove(n) # 如果值一样就删除lists中的合数,这样剩下的就只有质数了

print(lists)

想打印一组质数却说我列表出错,请问这是什么问题呢?
当然可能会有更好的解决方式,这边先暂时想到这儿了,如果有更好的办法,敬请留言,谢谢~

以上是 想打印一组质数却说我列表出错,请问这是什么问题呢? 的全部内容, 来源链接: utcz.com/p/938286.html

回到顶部