2016-07-15 7 views
0

Wie kann ich eine globale Variable in der Hauptfunktion ändern? Ich setze eine globale Variable ADDITION und modifiziere sie in einer Funktion. Dann versuche ich, es in main zu ändern, aber es scheint, als ob ich gescheitert bin.Ändern Sie den Wert der globalen Variablen in 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

Im Allgemeinen sollten Sie versuchen, Code zu teilen, die tatsächlich ausgeführt werden können. .. Es gibt viele Aufrufe an undefinierte Methoden, die es schwierig machen, Ihre Ergebnisse zu reproduzieren. (Obwohl Sie auch keine Ergebnisse geteilt haben.) – smarx

Antwort

2

Sie haben einen Rechtschreibfehler in main():

 ADDITIION = 0 

 ADDITION = 0 
0

In welcher Weise glauben Sie, dass Ihr Code nicht funktioniert? Vielleicht versuchen Sie es zuerst zu vereinfachen. Dieser Code verhält sich wie erwartet:

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

ADDITION in meiner Hauptfunktion scheint wie der Wert nicht geändert. – Allen