想打印一组质数却说我列表出错,请问这是什么问题呢?
想要打印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, 你自己慢慢看吧.
回答:
非常不建议在数组遍历时,对于数组进行append
和remove
操作
回答:
思考了一下,感觉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