2016-10-30 16 views
0

空気抵抗のある発射体の軌道を作るためにmain関数を使用しようとしています。問題は、メイン関数を使用しているときにエラーが発生していますが、main関数を使用していないときには、何が間違っていたのでしょうか?メイン関数Python 2.7.2を使用した後にエラーが発生しました

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

、その後、残りを:あなたはグローバル変数を使用して主張して明示的に明示的にグローバルとしてそれらを定義する必要が関数にそれらを送信したくない場合は

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() 
+0

なぜコードを 'vx = ...'行に字下げし始めましたか? – Barmar

+0

どのようなエラーがありましたか? – Barmar

+0

すみません。コードをコピーして投稿すると問題になりました。それについて言えば、私がmain()を置かなければ、すべて正常に動作します。しかし、このようにmain()を置くと、 "UnboundLocalError:割り当て前にローカル変数 'sy'が参照されている" – Nai

答えて

0

。グローバル変数(たとえばなど)の読み取り操作では不要な答えを見たかもしれませんが、関数内の任意の場所に代入すると、Pythonはその変数をローカル変数と見なします。したがって、ローカル変数として、whileの開始時には定義されません。

+0

メイン関数(vを含む)にグローバル変数を追加しました。そしてアドバイスをありがとう。 – Nai

関連する問題