2016-03-29 8 views
0

「PythonでのDoing Math」という本のPythonスクリプトの例を使っていますが、私の変数が定義されていないことを教えてくれるNameErrorに対して、が定義される。私は、Python 3.4を使用していますし、コードがPythonスクリプトでのNameError

''' 
    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() 

である、それは私を与える誤りがある

: NameError名「R」

が定義されていない、それはその行で定義されていません状態r =範囲(100,1001,50)?

なぜこれを定義として使用しないのですか?

私はやっているような驚くほど単純で信じられないほど愚かなことがあると確信していますが、私はこのような単純なことがどんなに難しいかについて知っています。

ありがとうございます!

+0

どのコードが 'def generate_F_r():'にあるべきですか?そのままでは、エラーは有効です。 'r'は' generate_F_r'メソッド内にのみ存在します。また、コードが現在どのように構造化されているのか、メソッド外でコードを使用しようとしています。 – idjaw

+0

さらに、インデントが間違っているか、generate_F_r()が呼び出される前にrが使用されています – Natecat

答えて

0

関数内のコードは、関数が呼び出されるまで実行されません。すでにrを参照しようとするまで、generate_Fr()に電話をかけることはありません。 の場合は、最初に関数を呼び出しても、はまだローカル変数です。関数の最初にglobal rでグローバルにする必要があります。

関連する問題