1

我有一些我认为是正确的代码。但是,它应该返回一个值向量,但它返回的是单个累积值。

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]

4

3 回答 3

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
于 2012-09-19T08:47:57.207 回答
2

不要使用 q,而是使用更 Pythonic 的产量

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

此外,代码的问题是您之前忘记了 4 个空格缩进q.append(s)

于 2012-09-19T08:48:31.567 回答
1

这只是一个缩进问题。您的行q.append(s)与函数的主要部分处于相同的缩进级别,这意味着它仅在 for 循环结束后执行。将其向右移动一级,使其与循环体的其余部分一起使用,并且每次循环都会执行。

于 2012-09-19T08:48:12.580 回答