使用主函数Python 2.7.2后出错

时间:2016-10-30 00:43:51

标签: python

我试图使用主要功能,以使射弹的轨迹具有空气阻力。问题是,当我使用main函数时,我得到了一个错误,但是当我使用没有main的函数时,我做错了什么?

    v=float(input("initial velocity: "))
    theta=float(input("Angle from the horizontal of initial velocity: "))
    B=float(input("normalised drag coefficient: "))
    t=float(input("the step interval in seconds: " ))

    vx = v * math.cos(theta*math.pi/180.0)
    print(str(vx))
    vy = v * math.sin(theta*math.pi/180.0)
    sx = 0
    sy = 0
    t0 = 0
    ax = 0
    ay = 0
    g= 9.81

    def AX(ax):
        ax= -B*v*vx
        return ax
    def AY(ay):
        ay= -(B*v*vy)-g
        return ay
    def VX(vx):
        vx=vx+ax*t
        return vx
    def VY(vy):
        vy=vy+ay*t
        return vy
    def SX(sx):
        sx= sx + vx*t
        return sx
    def SY(sy):
        sy= sy + vy*t
        return sy
    Xdisplacement=[]
    Ydisplacement=[]
    def main():
        while sy>=0 :
            Xdisplacement.append(float(sx))
            Ydisplacement.append(float(sy))
            sx=SX(sx)
            sy=SY(sy)
            ax=AX(ax)
            ay=AY(ay)
            vx=VX(vx)
            vy=VY(vy)
            v= ((vx**2.0)+(vy**2.0))**(1.0/2.0)

        plt.plot(Xdisplacement,Ydisplacement)
        plt.title("trajectory")
        plt.xlabel("x")
        plt.ylabel("y")
        plt.show()
    main()

1 个答案:

答案 0 :(得分:0)

如果您坚持使用全局变量并且不想将它们显式发送到函数,则必须将它们明确地定义为全局变量:

def main():
    global sy,sx,ax,ay,vx,vy

然后其余的。您可能已经看到了对全局变量的读取操作不必要的答案(如在您的while sy >= 0中),但如果您在函数内的任何位置分配变量,python将假定该变量是本地变量,您可以这样做。因此,作为局部变量,它不是在开始时定义的。