我正在尝试通过解决 Project Euler 网站上的问题来学习 Python。我确切地知道我想让我的代码做什么,我的方法在纸上有效,但我无法让代码工作。
GitHub链接:https ://github.com/albyr/euler-python/blob/master/euler3.py
我创建了两个函数,一个计算目标数的因数,一个检查给定数是否为素数。
# Function that finds all the factors of a given number
def findfactors(n):
# for i in range(1,int(sqrt(n)+1)):
for i in range(1,n+1):
if n/i == int(n/i):
factors.append(i)
# Function that checks if a number is prime
def checkprime(n):
# Trial division
for i in range(2,int(sqrt(n)+1)):
if n/i == int(n/i):
# Number gives a remainder upon division and therefore is not prime
isprime = False
break
else:
isprime = True
if isprime == True:
return True
elif isprime == False:
return False
我敢肯定,对于专家来说,代码看起来很糟糕。但如果我使用 Python shell,它就可以工作:
>>> checkprime(9)
False
>>> checkprime(79)
True
>>> checkprime(factors[3])
True
但是当我用 F5 运行程序时,我得到:
Traceback (most recent call last):
File "/home/alby/euler-python/euler3.py", line 45, in <module>
checkprime(factors[i])
File "/home/alby/euler-python/euler3.py", line 32, in checkprime
if isprime == True:
UnboundLocalError: local variable 'isprime' referenced before assignment
如果我从程序中使用硬编码的数字(例如 checkprime(77)
)调用 checkprime 函数,我根本不会得到任何输出。我确信这是我不理解的 Python 工作方式的基本原理,但我终其一生都无法弄清楚是什么。
有什么建议么?