2016-07-15 17 views
0

main関数のグローバル変数を変更するにはどうすればよいですか?グローバル変数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

関連する問題