我想编写使用Python扩展质数列表的代码,但某些方法无效:
list = [2,3,5,7]
for num in range(15,30):
for i in range(0,len(list)-1):
if num%list[i] != 0:
if i + 1 == len(list):
list.append(num)
else:
continue
else:
break
print(list)
错误的输出是:[2,3,5,7]
答案 0 :(得分:1)
您的问题是
for i in range(0,len(list)-1):
应该是
for i in range(0,len(list)):
python中的range
函数将在您在 stop 参数中指定的数字之前的数字上停止,因此您不必自己减1。来自documentation:
对于正步,范围r的内容由公式r [i] = start + step * i确定,其中i> = 0且 r [i] <停止。
答案 1 :(得分:0)
因为您的代码无效。
如果运行代码,您将看到程序在第一个else
条件的if
部分中跳转,并且您将中断for
循环。因此,您的程序除了对列表进行解斜并打印该列表外,不会执行其他任何操作,因为if
条件的真实部分未得到处理。
答案 2 :(得分:0)
另一种解决问题的方法@RobStreeting指出(+1)是摆脱range(len())
习惯用法,而使用enumerate()
。我们可以通过在最后一个收集的素数之后开始循环来修复@ThierryLathuille指出的缺失的11和13。最后,您不应有一个名为list
的变量,因为它是Python的保留关键字。放在一起,您的代码看起来像:
primes = [2, 3, 5, 7]
for number in range(primes[-1] + 1, 50):
for i, prime in enumerate(primes, start=1):
if number % prime:
if i == len(primes):
primes.append(number)
else:
continue
else:
break
print(*primes, sep=", ")