我正在尝试这样的事情 -
for j in range(1,100):
ej=[]
rj=[]
vj=[]
for i in range(0,10):
pj=(r(j-1)[i]+v(j-1)[i]*0.01)
qj=v(j-1)[i]
rj.insert(i,pj)
vj.insert(i,qj)
for i in range(0,10):
z1=0.5*1*(vj[i]**2)
ej.insert(i,z1)
ejtotal=sum(ej)
print(j,ejtotal)
我希望j
循环从1
开始,我会事先给出r0
和v0
的值。但是部分r(j-1), v(j-1)
无效,它无法理解(j-1)
并调用该对象的先前值。有人可以帮忙吗?提前致谢。
答案 0 :(得分:0)
听起来你的变量中包含数字,例如r0
和v0
,而你正试图使用数值计算r(j-1)
查找它们。这不起作用,因为Python将r(j-1)
解释为尝试使用参数r
调用函数j-1
。我怀疑您还会发现您的rj
,vj
和ej
值未达到预期效果(他们没有写入r1
,{{1 },v1
等等,它们只是以“j”结尾的名称。
您应该使用e1
值列表,r
每个append
值的新值。而不是j
,你会查找r0
。如果您使用r[0]
,则不会出现问题。
我怀疑你想要这样的东西:
r[j-1]
我通过列表推导替换内部循环来简化了一些事情。通过使用索引r = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]] # example r[0] data
v = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]] # example v[0] data
e = [[]] # no e0 value is used
for j in range(1,100):
r.append([r[j-1][i]+v[j-1][i]*0.01 for i in range(10)])
v.append([v[j-1][i] for i in range(10)])
e.append([0.5*1*(v[j][i]**2) for i in range(10)])
ejtotal = sum(e[j])
print(j,ejtotal)
来引用序列中的最后一项,并且可能直接迭代前面列表中的值而不是索引它们,可以减少它。您也可以重复使用第一个-1
和v
值,因为它们不会随着e
值的增加而改变。