2016-07-15 2 views
0

주 함수에서 전역 변수를 수정하려면 어떻게해야합니까? 전역 변수 ADDITION을 설정하고 함수에서 수정합니다. 그런 다음 main에서 수정하려고하지만 실패한 것처럼 보입니다.Python3의 전역 변수 값 변경

ADDITION = 0 

def add(a, b): 
    global ADDITION 
    ADDITION = ADDITION + 1 
    return a+b 

def fib_classic(n): 
    if(n <= 1): 
      return n 

    else: 
      return add(fib_classic(n-2) , fib_classic(n-1)) 


def fib_closed(n): 
    fib = (math.pow(1+math.sqrt(5),n) - (1-math.pow(math.sqrt(5),n)))/(math.pow(2,n)*math.sqrt(5)) 
    return math.floor(fib) 


def fib_classic(n): 
    if(n <= 1): 
      return n 

    else: 
      return add(fib_classic(n-2) , fib_classic(n-1)) 


def fib_loop(n): 
    a = 0 
    b = 1 

    if(n <= 1): 
      return n 

    else: 
      for i in range(0, n-1): 
        c = b 
        b = add(a, b) 
        a = c 
      return b 


def fib_mem(n): 
    global FIB_DIC 
    if(n in FIB_DIC): 
      return FIB_DIC[n] 

    else: 
      if(n <= 1): 
        FIB_DIC[n] = n 

      else: 
        FIB_DIC[n] = add(fib_mem(n-1), fib_mem(n-2)) 

      return FIB_DIC[n] 

def main(): 

    for i in range(0,36): 
      global ADDITION 
      print("Computing the {0}th Fibonacci Number:".format(i)) 
      print("The closed form finds:", end=" "); print(fib_closed(i)) 
      print("The recursive definition finds:", end=" "); print(fib_classic(i)) 
      print("Additions needed for recursive definition:", end=" "); print(ADDITION) 
      ADDITIION = 0 
      print(ADDITION) # not 0 
      print("The loop definition finds:", end=" "); print(fib_loop(i)) 
      print("Additions needed for loop definition:", end=" "); print(ADDITION) 
      ADDITION = 0 
      print("The memoization definition finds:", end=" "); print(fib_mem(i)) 
      print("Additions needed for memoization definition:", end=" "); print(ADDITION) 
      print("--------------------") 
+0

을해야한다, 실제로 실행할 수있는 코드를 공유하는 시도하십시오. 여기에는 정의되지 않은 메서드에 대한 호출이 많아 결과를 재현하기가 어렵습니다. (비록 당신도 어떤 결과도 공유하지 않았다.) – smarx

답변

2

당신은 main()에 맞춤법 오류가 있습니다 :이 코드는 예상대로 작동

 ADDITIION = 0 

는 일반적으로

 ADDITION = 0 
0

어떤 식 으로든 코드가 작동하지 않는다고 생각합니까? 아마 먼저 그것을 단순화하려고 노력하십시오.

ADDITION = 0 

def modify(): 
    global ADDITION 
    ADDITION = ADDITION + 1 

def main(): 
    global ADDITION 
    print("Initial value: {}".format(ADDITION)) 
    modify() 
    print("Subsequent value: {}".format(ADDITION)) 
    ADDITION = 0 
    print("Zero'd out: {}".format(ADDITION)) 
    modify() 
    print("Modified again: {}".format(ADDITION)) 

if __name__ == '__main__': 
    main() 

# Output: 
# Initial value: 0 
# Subsequent value: 1 
# Zero'd out: 0 
# Modified again: 1 
+0

내 주요 기능에 추가는 값을 수정하지 않은 것처럼 보입니다. – Allen