【发布时间】:2018-01-08 16:32:55
【问题描述】:
我最近开始尝试使用 python 解决 Euler 项目中的问题,并且在尝试计算素数并将它们附加到列表时遇到了这个问题。我已经编写了以下代码,但是我很困惑为什么我运行它时它没有输出任何东西。
import math
primes = []
def isPrime(i):
if number<=1:
return False
if number==2:
return True
if number%2==0:
return False
for i in range(3,int(sqrt(number))+1):
if number%i==0:
return False
return True
for i in range (1, 9999999):
if isPrime(i) == True:
primes.append(i)
else:
continue
print(primes)
【问题讨论】:
-
开始将
def isPrime(i):更改为def isPrime(number):和for i in range(3,int(sqrt(number))+1):更改为for i in range(3,int(math.sqrt(number))+1): -
这是一种非常低效的计算素数列表的方法。最好直接用筛子生成素数。
-
Mh... 它还能运行吗?
i应该是number,sqrt应该是math.sqrt -
当你在 Python 中使用 for 循环时,你几乎肯定做错了。 Python 方法是使用列表推导:
primes = [i for i in range (1, 9999999) if isPrime(i)]. -
你说的很对@DYZ,这正是我要评论的,因为它比附加到空列表和更简洁的语句更有效