2016-03-29 10 views
0

Ich arbeite durch ein Beispiel Python-Skript aus dem Buch "Doing Math with Python" und ich laufe immer gegen einen NameError, der mir sagt, dass meine Variable nicht definiert ist, wenn es mir so aussieht ist definiert.NameError in Python Skript

Ich verwende Python 3.4 und der Code ist

''' 
    Gravitational Calculations 
    ''' 

    import matplotlib.pyplot as plt 

    #Draw the graph 

    def draw_graph(x,y): 
     plt.plot(x,y,marker='o') 
     plt.xlabel('Distance (m)') 
     plt.ylabel('Force (N)') 
     plt.title("Gravitational force as a function of distance") 

    def generate_F_r(): 
     #Generate values for r 
     r=range(100,1001,50) 

     #Empty list to store F values 
     F=[] 

    #G Constant 
    G=6.674*(10**-11) 
    #Two masses 
    m1=0.5 
    m2=1.5 

    #Calculate F and append it into the F-list 
    for dist in r: 
     force=G*m1*m2/(dist**2) 
     F.append(force) 

    #Call the Draw Plot Function 
    draw_graph(r,F) 

    if __name__=='__main__': 
     generate_F_r() 

Der Fehler es mir gibt, ist: Nameerror Name ‚r‘ ist nicht definiert

nicht definiert ist es in der Zeile, die Zustände r = Bereich (100,1001,50)?

Warum nimmt es das nicht als Definition?

Ich bin mir sicher, dass es etwas sehr einfach und unglaublich dumm ist, aber ich bin am Ende meiner Weisheit, wie so eine einfache Sache so schwer sein könnte.

Danke!

+0

Welcher Code sollte in 'def generate_F_r():' enthalten sein. Denn so ist der Fehler gültig. 'r' existiert nur innerhalb der' generate_F_r' Methode. Und ausgehend davon, wie Ihr Code derzeit strukturiert ist, versuchen Sie, ihn außerhalb der Methode zu verwenden. – idjaw

+0

Darüber hinaus ist entweder Ihr Einzug falsch, oder r wird verwendet, bevor generate_F_r() aufgerufen wird – Natecat

Antwort

0

Code in Funktionen wird erst ausgeführt, wenn die Funktion aufgerufen wird. Sie rufen generate_Fr() erst auf, nachdem Sie bereits versucht haben, auf r zu verweisen. Auch wenn Sie haben rufen Sie die Funktion zuerst, obwohl r ist immer noch nur eine lokale Variable. Sie müssen es global mit global r am Anfang der Funktion machen.

Verwandte Themen