Python 欧拉计划';s 3号

Python 欧拉计划';s 3号,python,Python,有人能解释为什么这段代码与样本号13195一起工作,但在我使用问题号时崩溃了吗 num = 13195 def isprime(num): for i in range(2,num): if num % i == 0: ans = i return ans print isprime(isprime(isprime(num))) 您需要为ans指定一个默认值 当输入的数字是素数时,程序从不给变量ans赋值。因此,当函数试图返回该变量时,它实际上没有定义。在Pyt

有人能解释为什么这段代码与样本号13195一起工作,但在我使用问题号时崩溃了吗

num = 13195

def isprime(num):
  for i in range(2,num):
    if num % i == 0:
      ans = i
  return ans

print isprime(isprime(isprime(num)))

您需要为
ans
指定一个默认值


当输入的数字是素数时,程序从不给变量
ans
赋值。因此,当函数试图返回该变量时,它实际上没有定义。

在Python 2中,
range
构造一个列表。所以程序试图在内存中包含一个巨大的列表,但它不能。使用
xrange
,它将根据需要生成迭代数字,而不是一次生成所有数字


您还需要尽早结束循环,否则它将永远检查这么多数字。因此,一旦你找到一个除数,就用它来分割原始数字,使之更小,从而便于管理。

你为什么要调用
isprime(isprime(isprime(num))
?这不应该只是一个电话吗?你可以引用一下作业吗。您是否考虑过输入
num=1
:它将返回
None
…因为它效率太低,所以找到另一个算法(例如:)将有助于程序应该做什么,或者“问题编号”是什么。至少添加一个链接,这样我们就不用问谷歌了。@tobias_k问题如下:13195的主要因素是5、7、13和29。数字600851475143中最大的素因子是什么?这不是OP一直存在的问题。输入的数字非常大,函数没有返回到
ans
。这是一个非常好的观点,没错。但是
13195
不够大,不足以产生这个问题。这就是为什么他说它可以与13195一起工作。问题号码是600851475143。哦,我现在明白了:)我没有停下来好好读标题。