数が素数であるかどうかをチェックする関数を含むプログラムを書いています---素数である場合は、それを特定のリストに追加し、pickle
モジュールを使用してファイルとして保存します。関数が再度呼び出されると、(を使用してpickle
)リストが開き、番号がリストに含まれているかどうかがチェックされます。そうである場合は素数であり、そうでない場合は、かなり基本的な手法を使用して素数であるかどうかをチェックします。
これが私のコードです:
'''
List of functions:
_isPrime(n)_ : checks if n is a prime number
_remove(n)_ : removes n from the running list of primes and updates the pkl file
_prevPrimes(n)_ : generates a list of primes up to n
_view()_ : imports and prints pList
_delete()_ : deletes all of pList
'''
def isPrime(n):
import pickle
from math import sqrt
pList = pickle.load(open('primes.pkl', 'rb'))
x=2
if (type(n) != int) and (type(n) != long):
print "N is not an integer."
return False
if n in pList:
print "%d is a prime number." % (n)
return True
else:
while (sqrt(n) >= x):
if ((n%x) != 0):
x = x + 1
if (sqrt(n) < x):
pList.append(n)
pList = sorted(pList)
pickle.dump(pList, open('primes.pkl', 'wb'))
print "%d is a prime number." % (n)
return True
if ((n%x)==0):
print "%d is not a prime number." % (n)
return False
pList = sorted(pList)
pickle.dump(pList, open('primes.pkl', 'wb'))
# NEW FUNCTION
def prevPrimes(n):
from time import clock
startTime= clock()
import pickle
from math import sqrt
pList = pickle.load(open('primes.pkl', 'rb'))
z = abs((max(pList)) - n)
y= max(pList)
if (z==0):
print "Done"
while (y <= n):
pList = pickle.load(open('primes.pkl', 'rb'))
if isPrime(y):
if y not in pList:
pList.append(y)
y= y + 1
pList = sorted(pList)
pickle.dump(pList, open('primes.pkl', 'wb'))
print startTime
# NEW FUNCTION
def remove(n):
import pickle
pList = pickle.load(open('primes.pkl', 'rb'))
view()
pList.remove(n)
pickle.dump(pList, open('primes.pkl', 'wb'))
view()
# NEW FUNCTION
def view():
import pickle
pList = pickle.load(open('primes.pkl', 'rb'))
print pList
# NEW FUNCTION
def delete():
import pickle
pList = [2, 3, 5]
pickle.dump(pList, open('primes.pkl', 'wb'))
view()
Pythonシェルでは正常に動作します。
発生するエラーは、関数が実際に呼び出された場合です。私はこれを行うことによってこれを達成しましたfrom primenum import isPrime
。ただし、I / O(with pickle
)でエラーが発生します...次の図を参照してください。
ご覧のとおり、primes.pkl
ファイルは明らかにそこにあります。
これを修正するにはどうすればよいですか?提案を事前に感謝します:)