Python脚本中的NameError

Python脚本中的NameError,python,Python,我正在学习《用Python做数学》一书中的Python脚本示例,我不断遇到一个NameError,它告诉我我的变量没有定义,在我看来,它好像已经定义了 我使用的是Python3.4,代码是 ''' Gravitational Calculations ''' import matplotlib.pyplot as plt #Draw the graph def draw_graph(x,y): plt.plot(x,y,marker

我正在学习《用Python做数学》一书中的Python脚本示例,我不断遇到一个NameError,它告诉我我的变量没有定义,在我看来,它好像已经定义了

我使用的是Python3.4,代码是

 '''
    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()
它给我的错误是: 名称错误名称“r”未定义

它不是在表示r=范围(1001,50)的行中定义的吗

为什么不以此为定义

我肯定我在做一些非常简单和愚蠢的事情,但我不知道这么简单的事情怎么会这么难


谢谢

函数中的代码在函数被调用之前不会执行。在尝试引用
r
之前,您不会调用
generate\u Fr()
。即使您确实首先调用了该函数,
r
仍然只是一个局部变量。您需要在函数的开头使用
global r
将其设置为全局。

def generate\u F\u r()中应该包含哪些代码:。因为按原样,错误是有效的
r
仅存在于
generate\u F\u r
方法中。从代码当前的结构来看,您试图在方法之外使用它。此外,要么缩进错误,要么在调用generate_F_r()之前使用了r