Project EulerのWebサイトで問題を解決して、Pythonを学ぼうとしています。私は自分のコードに何をさせたいかを正確に知っており、私のメソッドは紙の上で機能しますが、コードを機能させることはできません。
GitHubリンク:https ://github.com/albyr/euler-python/blob/master/euler3.py
私は2つの関数を作成しました。1つは目標数の因数を計算し、もう1つは与えられた数が素数であるかどうかをチェックします。
# 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の動作の基本的なことであり、私には理解できませんが、私は一生の間、何を理解することができません。
助言がありますか?