我是一名热衷编程的本科生。今天我遇到了一个使我非常困惑的问题。
编写程序以确定给定列表是否具有加法器 顺序。也就是说,由3个连续元素组成的序列 前两个元素加起来是第三个元素。返回总和值。或返回 如果没有这样的金额,则没有。
示例1:
输入:
[0,1,2,3,5,8,13]
输出:
3
,因为1 + 2 =3。请注意,8也是前两个值的总和,但是它在3之后示例2:
输入:
[1,2,4,5,6]
输出:无。由于没有连续的值求和为第三个连续的值。
我的答案是:
def sequence_sum(my_list):
for x in range(0, len(my_list)):
if (my_list[x] + my_list[x+1]) != my_list[x+2]:
return None
else:
return my_list[x+2]
测试结果为:
Traceback (most recent call last):
File "/grade/run/test.py", line 30, in test_larger
self.assertEqual(sequence_sum(my_arr), 1)
AssertionError: None != 1
以及:
Traceback (most recent call last):
File "/grade/run/test.py", line 35, in test_another
self.assertEqual(sequence_sum([0,3,4,5,9]), 9)
AssertionError: None != 9
答案 0 :(得分:0)
for x in range(0, len(my_list)):
if (my_list[x] + my_list[x+1]) != my_list[x+2]:
return None
else:
return my_list[x+2]
同时拥有两个分支return
是一个错误,因为这意味着函数将在循环的第一次迭代中返回。如果找到比赛,直接返回是正确的。但是,如果找不到匹配项,就无法声明失败。稍后可能有一场比赛。 return None
需要延迟,直到搜索了整个列表。
for x in range(0, len(my_list)):
if my_list[x] + my_list[x+1] == my_list[x+2]:
return my_list[x+2]
return None
这将解决当前的问题,但是运行它,您现在将遇到索引超出范围的异常。我将它留给您来调试该问题。
答案 1 :(得分:0)
在我看来,您只检查列表的第一部分。 return
不管在哪里都将退出该函数,因此在检查0 + 3
是否等于4
后,它将返回None
。因此,请永远不要检查9
。
要解决此问题,请将return
移至函数末尾,并使比较器进入==
。
for loop:
if ([list[x]+list[x+1]) == list[x+2]:
return list[x+2]
return None
答案 2 :(得分:0)
for x in range(0, len(my_list) - 2):
if my_list[x] + my_list[x + 1] == my_list[x + 2]:
return my_list[x + 2]
return None
您正在检查所有索引(0、1、2、3 ...),直到第二个索引才在最后一个索引之前,以免触发索引越界异常。 在那里,您检查两个连续的元素是否是列表中下一个元素的总和。 如果有这样的一对,则将其退回。如果没有(遍历整个列表),则返回None。
答案 3 :(得分:0)
您可以使用deque
保存最后两个元素:
from collections import deque
def func(l: list):
seq = deque(maxlen=2)
for num, i in enumerate(l):
if num > 1 and sum(seq) == i:
return i
else:
seq.append(i)
print(func([0, 1, 2, 3, 5, 8, 13]))
# 3
print(func([1,2,4,5,6]))
# None
答案 4 :(得分:0)
found_sums = [x for i, x in enumerate(data[2:])
if data[i] + data[i+1] == x]
first_value = next(iter(found_sums), None)
found_sums 是一个列表推导,返回的值等于前两个值之和。 first_value 返回这些值中的第一个;如果列表为空,则返回None。
for data in ([0,1,2,3,5,8,13], [1,2,4,5,6]):
found_sums = [x for i, x in enumerate(data[2:]) if data[i] + data[i + 1] == x]
first_value = next(iter(found_sums), None)
print('Result for {}:\t{}'.format(data, first_value))
这将返回:
[0,1,2,3,5,8,13]的结果:3
[1、2、4、5、6]的结果:无