Help with Python UnboundLocalError: local variable referenced before assignment

numpy, python

Solution

In the first line of `update_r`, you have `vs,ve=update_v(n,vs,ve,ms,me,dt,fs,fe)`. Look at the function that you are calling. You are calling `update_v` with a bunch of parameters. One of these parameters is `vs`. However, that is the first time in that function that `vs` appears. The variable `vs` does not have a value associated with it yet. Try initializing it first, and your error should disappear

Problem

I have post the similar question before,however,I think I may have misinterpreted my question,so may I just post my origin code here,and looking for someone can help me,I am really stuck now..thanks alot. ``` from numpy import * import math as M #initial condition All in SI unit G=6.673*10**-11 #Gravitational constant ms=1.9889*10**30 #mass of the sun me=5.9742*10**24 #mass of the earth dt=10 #time step #Creat arrays vs=array([[0,0,0]]) #1st element stand for x component of V of earth ve=array([[29770,0,0]]) rs=array([[0,0,0]]) re=array([[0,1.4960*10**11,0]]) #First update velocity in order to start leapfrog approximation fs=-G*ms*me*((rs-re)/(M.sqrt((rs-re)[0][0]**2+(rs-re)[0][1]**2+(rs-re)[0][2]**2))**3) fe=-fs vs=vs+fs*dt/ms ve=ve+fe*dt/me n=input('please enter the number of timestep you want it evolve:') #update force def force(n,ms,me,rs,re,G): rs,re=update_r(rs,re,n,dt) fs=-G*ms*me*((rs-re)/(M.sqrt((rs-re)[0][0]**2+(rs-re)[0][1]**2+(rs-re)[0][2]**2))**3) fe=-fs return fs,fe #update velocities def update_v(n,vs,ve,ms,me,dt,fs,fe): fs,fe=force(n,ms,me,rs,re,G) i=arange(n) vs=vs+fs[:]*i[:,newaxis]*dt/ms ve=ve+fe[:]*i[:,newaxis]*dt/me return vs,ve #update position def update_r(rs,re,n,dt): vs,ve=update_v(n,vs,ve,ms,me,dt,fs,fe) i=arange(n) rs=rs+vs[:]*i[:,newaxis]*dt re=re+ve[:]*i[:,newaxis]*dt return rs,re #there is start position,v,r,f all have initial arrays(when n=0). #then it should calculate f(n=1) then use this to update v(n=0) #to v(n=1),then use v(n=1) update r(n=0) to r(n=1),then use r(n=1) #update f(n=1) to f(n=2)....and so on until finish n.but this code seems doesnt do this,,how can I make it? – ``` when i call force python gives: ``` please enter the number of timestep you want it evolve:4Traceback (most recent call last): File "<pyshell#391>", line 1, in <module> force(n,ms,me,rs,re,G) File "/Users/Code.py", line 24, in force rs,re=update_r(rs,re,n,dt) File "/Users/Code.py", line 39, in update_r vs,ve=update_v(n,vs,ve,ms,me,dt,fs,fe) UnboundLocalError: local variable 'vs' referenced before assignment ``` can anyone give me some tips?thanks......

Original source