Python 我的变量是未定义的,当我认为我已经定义了它时

Python 我的变量是未定义的,当我认为我已经定义了它时,python,Python,这是我的密码 #project starts here import numpy as np import scipy.integrate import matplotlib.pyplot as plt from numpy import pi from scipy.integrate import odeint def deriv(cond,t): for q in range (0,N): i=6*q dydt[i]=cond[i+3]

这是我的密码

#project starts here
import numpy as np
import scipy.integrate
import matplotlib.pyplot as plt
from numpy import pi
from scipy.integrate import odeint

def deriv(cond,t):
    for q in range (0,N):
        i=6*q
        dydt[i]=cond[i+3]
        dydt[i+1]=cond[i+4]
        dydt[i+2]=cond[i+5]
        r=sqrt((cond[i])**2 +(cond[i+1])**2 +(cond[i+2])**2)
        dydt[i+3]=-G*M*cond[i]/(r**3)
        dydt[i+4]=-G*M*cond[i+1]/(r**3)
        dydt[i+5]=-G*M*cond[i+2]/(r**3)
    return dydt

G=1
M=1
N=12
vmag=((G*M)/(2))**(0.5)
theta = np.linspace(0,2*pi,N)
x=2*np.cos(theta)
y=2*np.sin(theta)
vx=-vmag*np.sin(theta)
vy=vmag*np.cos(theta)
z=np.zeros(N)
vz=np.zeros(N)
t=np.linspace(0,30,100)

cond=list(item for group in zip(x,y,z,vx,vy,vz) for item in group)
sln=odeint(deriv, cond, t, args=(G,M))
我收到一条关于未定义dydt的错误消息。我想我已经在导数函数中定义了它。我的意图是使它成为一个向量,其中包含cond数组的适当导数(因此使用i)。为什么我的定义是错误的?

没有定义“dydt”,您应该先定义它,然后才能对其使用索引

关于您的代码,您可以这样做:

i = 6*q
dydt = list(range(i))

很明显,你没有定义它。您必须为
dydt
赋值,比如
dydt=…
dydt只能通过索引访问。它从来没有被指定为必要大小的列表,但我想根据我进一步定义的cond数组来定义它。我应该把它定义为一个零向量,然后允许它被修改吗?使用append或其他方法?然后我得到错误“TypeError:“range”对象不支持项分配”。知道为什么吗?啊,谢谢你,这似乎奏效了。但是(我知道这不是对同一个问题的100%后续),然后我得到错误“IndexError:list assignment index out range”。这个范围是我在for语句中定义的范围,还是与我定义dydt的方式有关?@TimSmith这可能是因为你要去列表中没有定义的地方,我看到你正在访问I(列表中的最大值)+X,这在你的情况下是不可能的。在尝试访问索引之前,您应该正确地调整列表的大小。我正在尝试这样做:dydt的第一个元素是cond的第四个元素,dydt的第七个元素是cond的第十个元素,等等。是否使用I not方法来选择列表的适当部分?