我有一些我认为正确的代码。但是,它应返回值向量,但它返回单个累积值。
pExact = 0.8
pOvershoot = 0.1
pUndershoot = 0.1
def move(p, U):
q = []
for i in range(len(p)):
s = pExact * p[(i - U) % len(p)]
s = s + pOvershoot * p[(i - U - 1) % len(p)]
s = s + pUndershoot * p[(i - U + 1) % len(p)]
print i, s # check if calculations are corrects
q.append(s)
return q # should return a vector
p = [0, 1, 0, 0]
print move(p, 1) # prints only cumulated value
我试着理解为什么它只打印一个值[0.10000000000000001]
而不是矢量[0, 0.1, 0.8, 0.1]
我认为它应该如何。
答案 0 :(得分:3)
q.append(s)
中有一个错误的缩进。它应该在for
循环内。
这是正确的版本:
pExact = 0.8
pOvershoot = 0.1
pUndershoot = 0.1
def move(p, U):
q = []
for i in range(len(p)):
s = pExact * p[(i - U) % len(p)]
s = s + pOvershoot * p[(i - U - 1) % len(p)]
s = s + pUndershoot * p[(i - U + 1) % len(p)]
print i, s # check if calculations are corrects
q.append(s)
return q # should return a vector
p = [0, 1, 0, 0]
print move(p, 1) # prints only cumulated value
答案 1 :(得分:2)
不使用q,而是使用更多的pythonic yield
def move(p, U):
for i in range(len(p)):
s = pExact * p[(i - U) % len(p)]
s = s + pOvershoot * p[(i - U - 1) % len(p)]
s = s + pUndershoot * p[(i - U + 1) % len(p)]
print i, s # check if calculations are corrects
yield s
此外,代码的问题是您在q.append(s)
答案 2 :(得分:1)
这只是一个缩进问题。你的行q.append(s)
与函数的主要部分处于同一缩进级别,这意味着它只在for循环结束后执行。将它向右移动一级,因此它与循环体的其余部分一起移动,并且每次循环都会执行它。