2012-11-17 5 views
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() 

그것은 파이썬 쉘에서 잘 작동 :

여기 내 코드입니다.

오류는 함수가 실제로 호출하는 경우 발생합니다. 나는 from primenum import isPrime을 해 이것을 수행했다. 그러나, 그것은 ... 여기 사진입니다 (pickle 포함) I/O와 오류를 가져옵니다 당신이 볼 수 있듯이, primes.pkl 파일이 분명히 존재

Function Error 2

.

어떻게 수정합니까? primenum 수입 isPrime에서

또는 전체 이름을 참조하십시오 : 당신이 필요로하는

import primenum 
primenum.isPrime(5) 

이미 올바르게 기능을 가져 오는 방법을 발견 제안 :

+0

을, 당신이 * 실제로 방식 파이썬 수입에 따라을 가져, 기능을 실행할 수 *있다 작업. 첫 번째 부분에서 정확히 무엇을 묻고 있습니까? –

+0

터미널에서 텍스트를 복사하여 여기에 편집기에 붙여 넣을 수 있습니다. 편집기 툴바에서 코드를 선택하여'{}'버튼을 사용하여 올바르게 포맷하십시오. 여기에 너무 많은 스크린 샷을 사용할 필요가 없습니다. 모든 텍스트입니다. –

+0

또한 파이썬 명령 프로세서 대신 파이썬 대화 형 셸에 대해서도 이야기합니다. –

답변

2

에 미리 감사드립니다 전체 경로를 사용하여 피클 파일을 저장하십시오. 그렇지 않으면 python은 로컬 디렉토리에서만이를 찾습니다. 나중에 다음

import os.path 

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

을 가진 파일을 엽니 다 : 아마도 당신의 홈 디렉토리에 저장 그래서

open(os.path.join(HOME_DIR, 'primes.pkl') 
+0

'~'의 형식은 무엇입니까? –

+0

@ F3AR3DLEGEND : 포맷? 그것은 유닉스에서 '홈 디렉토리'를 상징하지만, Windows에서도 작동합니다, IIRC. –

+0

파일의 목록을 읽고 편집 할 수 있어야하므로 ---'pickle'을 사용했습니다. 나는'pickle'을 사용하여 그것을하는 또 다른 방법이 필요합니다. –

관련 문제