我想加分。在插入的示例中,我想要开始时收到的答案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]
。我做错了什么?
答案 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]