2015-01-22 4 views
-1

내가 프로젝트에서 일하고 있어요 정의되지 않은이 오류는 나타나지 유지 :나가서 설명하자면 NameError : 전역 이름 '변수는'파이썬

class PRNG: 
    def __init__(self): 
    # parameters 
    # P-256 prime 
    self.p=115792089210356248762697446949407573530086143415290314195533631308867097853951 

    self.a=self.p-3 
    self.b=41058363725152142129326129780047268409114441015993725554835256314039467401291 
    self.E=curve(self.a,self.b,self.p) 

    self.E.n=115792089210356248762697446949407573529996955224135760342422259061068512044369 

    self.P=point(0,46263761741508638697010950048709651021688891777877937875096931459006746039284) 
    self.k=183521403747637560534595403690771364941493702673414885451510208165414833985 
    self.Q=mult(self.k,self.P,self.E) 

    self.t=bytes_to_int(os.urandom(32)) # initial seed 
    #print self.t 
    self.output_length=240 
    self.truncate_length=16 

    def function_attack(self, nbytes, predicted_state): 
     calls = ((nbytes*8-1)/self.output_length)+1 
     out = '' 
     for i in xrange(calls): 
      tP=mult(predicted_state,self.P,self.E) 
      s=tP.x 
      sQ=mult(s,self.Q,self.E) 
      r=sQ.x 
      r_out=r % (2**self.output_length) 
      self.t=s 
      out = out + int_to_bytes(r_out, self.output_length/8) 
     return out[:nbytes] 

def function(self, nbytes): 
     calls = ((nbytes*8-1)/self.output_length)+1 
     out = '' 
     for i in xrange(calls): 
      tP=mult(self.t,self.P,self.E) 
      s=tP.x 
      sQ=mult(s,self.Q,self.E) 
      r=sQ.x 
      r_out=r % (2**self.output_length) 
      self.t=s 
      out = out + int_to_bytes(r_out, self.output_length/8) 
     return out[:nbytes] 

첫 번째 방법은 별도의 파일에서 호출 및 출력이 항상되고있다 파이썬은 무엇을하고

File "C:\file1.py", line 32, in <module> 
    prng = PRNG() 
    File "C:\file_where_error_occurs.py", line 286, in __init__ 
    for i in xrange(calls): 
NameError: global name 'calls' is not defined 

: (나는를 호출 지역 변수의 이름을 변경에 관계없이 경우) 다음?

+0

로 프로그램을 실행보고 PRNG는 무엇입니까? 여기에 몇 가지 중요한 정보가 누락 된 것처럼 보입니다. 우리가 실행할 수있는 예제를 게시하고 동일한 오류를 줄 것입니다. –

+0

그래서, 제가 아래 투표를 받았다고 봅니다. 나는 파이썬으로 프로그래밍하지 않았다.) 그러나 나는 투표를 닫는 것에 더 놀랐다. @CloseVoter. 이 질문에 불만이있는 이유는 무엇입니까? – Sebi

+0

'print calls'를 사용하십시오. 당신은 놀랄 것입니다 ... – alfasin

답변

0

이 일반적 탭과 공백을 혼합하여 발생 ... 들여 쓰기 오류가 ... 가장 알맞은 편집자는 쉽게 당신을 위해이 문제를 해결할 수 있습니다 ... 당신의 들여 쓰기 오류가

python -tt my_program.py 
+0

나는 함수를 다시 작성했습니다 그리고 그들은 실제로 들여 쓰기 문제가되었습니다. 나는 notepad ++를 사용하고 있으며, 시각적으로 대구가 유효합니다. 불행하게도 또 다른 것이 있습니다 : AttributeError : PRNG 인스턴스에 'get_randomness'속성이 없습니다. 이 방법은 더 이상 수업에없는 것 같습니다. 위의 명령을 실행했습니다. 코멘트에서 위에 언급 된 것과 별개로 오류가 표시되지 않았습니다. – Sebi

+0

'def randomness (self, whatever)'는 내부 클래스 메서드 레벨에 대해 들여 쓰기 된 전역 레벨에 들여 쓰기되어 있지 않습니다. 여러분의 스페이스/탭을 관리 할 IDE를 사용하십시오 (예 : pycharm 또는 eclipse) ... 또한이 질문이 원래 질문에 대답하면 아마도 그것을 받아 들여야합니다. –

+0

내부 클래스 메서드에 들여 쓰기되어 있습니다. – Sebi

관련 문제