我試圖通過解決Project Euler網站上的問題來學習Python。我確切地知道我想要我的代碼做什麼,並且我的方法可以在紙上工作,但我無法使代碼正常工作。爲什麼我的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外殼:
>>> 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功能在程序中使用硬編碼號(例如checkprime(77)
)我根本沒有輸出。我確定這是關於Python工作方式的一個基本的東西,我不明白,但我不能爲我的生活制定出什麼。
有什麼建議嗎?
由於不打印任何內容,因此不會輸出任何內容 - 與控制檯不同,頂層函數調用在正常運行時不會自動打印結果。 – Amber 2012-07-13 18:19:14
那麼錯誤是非常明顯的:如果從未輸入循環,你正在讀取一個非初始化變量。通常這是一個非常奇怪的方式來編寫checkprime開始,只是如果你通過循環和循環中的錯誤返回true。 – Voo 2012-07-13 18:19:32