For循环不断进行,我该如何停止呢?

时间:2018-12-26 11:00:37

标签: python-3.x

我想加分。在插入的示例中,我想要开始时收到的答案3、5、7。但是,这种情况一直持续下去,导致我得到错误的答案。我做错了什么?

这是我的代码:

def score(pins):

    result=[]
    for i in range(len(pins) -1):
        if pins[0] + pins[1] != 10:
            result.append(sum([pins[0]] + [pins[1]]))
            print(result)
            score(pins[1:])
    return result

我得到的score([1,2,3,4])的结果是:

[3]
[5]
[7]
[5, 5]
[7]
[3, 3]
[5]
[7]
[5, 5]
[7]
[3, 3, 3]
[5]
[7]
[5, 5]
[7]
[3, 3, 3]

我想要的结果是[3,5,7],但我得到了[3,3,3]。我做错了什么?

2 个答案:

答案 0 :(得分:0)

这主要是因为您要混合使用循环和递归。

def score(pins):

    result=[]
    for i in range(len(pins) -1):
        if pins[0] + pins[1] != 10:
            result.append(sum([pins[0]] + [pins[1]]))
            print(result)
            score(pins[1:])
    return result

如您所见,您的代码首先使用for循环遍历列表,这是正确的。但是,您不使用变量“ i”,而是继续执行递归实现。但是,最终输出“ score(pins [1:])”不执行任何操作,因此,将列表的前两个项之和加len(scores)-1次,即3。< / p>

这是使用for循环的实现。

>>> def scores(pins):
    result = []
    for i in range(len(pins)-1):
        if pins[i] + pins[i+1] != 10:
            result.append(pins[i] + pins[i+1])
    return result

>>> scores([1,2,3,4])
[3, 5, 7]

(这里仅需注意一点,sum([pins[0]] + [pins[1]])是不必要的。pins[i] + pins[i+1]可以达到相同的效果)。

答案 1 :(得分:0)

只需尝试我的一个线性for循环:

mylist = [1,2,3,4]
scores = [sum(mylist[i:i+2]) for i in range(len(mylist)-1)]
print(scores) # output: [3,5,7]