0

数が素数であるかどうかをチェックする関数を含むプログラムを書いています---素数である場合は、それを特定のリストに追加し、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)でエラーが発生します...次の図を参照してください。

機能エラー2

ご覧のとおり、primes.pklファイルは明らかにそこにあります。

これを修正するにはどうすればよいですか?提案を事前に感謝します:)

4

1 に答える 1

2

関数を正しくインポートする方法はすでにわかっています。

primenumからインポートisPrime

またはフルネームを参照してください:

import primenum
primenum.isPrime(5)

ピクルスファイルを保存するには、フルパス使用する必要があります。それ以外の場合、Pythonはローカルディレクトリでのみそれを検索します。おそらくそれをあなたのホームディレクトリに保存してください:

import os.path

HOME_DIR = os.path.expanduser('~')

その後、次のコマンドでファイルを開きます。

open(os.path.join(HOME_DIR, 'primes.pkl')
于 2012-11-17T18:31:35.690 に答える