编写一个函数lucky_sevens(数字),它接受一个整数数组,如果连续三个元素之和为7,则返回true。
为什么这不能产生一个真实的输出?最后3个值和= 7。
def lucky_sevens(numbers):
x, y = 0, 3
sum_of_numbers = sum(numbers[x:y])
while (sum_of_numbers != 7) and (y < len(numbers)):
x = x + 1
y = y + 1
if sum_of_numbers == 7:
return True
else:
return False
print(lucky_sevens([1,2,3,4,5,1,1]))发布于 2016-11-29 03:21:11
当函数第一次被调用时-- sum_of_numbers变量得到列表中前3个值之和的值,并且从未用新的x,y值进行更新,您可能希望创建一个回调函数来实现这种行为。
现在,您需要将sum语句移动到while循环中,以便使用新的x,y值更新和:
def lucky_sevens(numbers):
result = False
x, y = 0, 3
while (y <= len(numbers)):
if sum(numbers[x:y]) == 7:
result = True
break
x += 1
y += 1
return result
print(lucky_sevens([1,2,3,4,5,1,1]))发布于 2016-11-29 03:19:14
像这样简单的东西怎么样
def lucky_sevens(numbers):
for x in range(len(numbers) - 2):
if sum(numbers[x:x+3]) == 7:
return True
return False或者用你的原始代码,稍微清理一下。
def lucky_sevens(numbers):
if len(numbers) < 3:
return False
x, y = 0, 3
sum_of_numbers = sum(numbers[x: y])
while sum_of_numbers != 7 and y < len(numbers):
x += 1
y += 1
sum_of_numbers = sum(numbers[x: y])
if sum_of_numbers == 7:
return True
return False你的错误出现在你的时间循环中。当你在循环的时候,sum_of_numbers保持不变。相反,您必须为while循环中的每个新x和y更新它。
还有一些重复的东西,比如else: return False,可以简化为return False,因为只有当sum_of_numbers == 7是假的时候,它才能到达该行。
最后,x = x + 1可以用更常见的速记x += 1编写,y = y + 1也是如此。
发布于 2016-11-29 04:35:43
这应该能起作用:
def lucky_sevens(numbers):
if len(numbers) < 3:
return False
return 7 in [sum(numbers[i:i+3]) for i in range(0, len(numbers)-2)]
print(lucky_sevens([1,2,3,4,5,1,1]))
# True列表理解将一次遍历3个数字,并计算每组三个整数的总和。如果7在该列表中,那么就有三个连续的数字与7相加。否则就没有了。
有一点要注意的是,做这样的列表理解需要列表中包含三个以上的元素。这就是为什么if声明在那里。
如果您想使用您的原始代码,您只需做一些调整。你的逻辑全在这里,只是需要一点清理。
def lucky_sevens(numbers):
x, y = 0, 3
sum_of_numbers = sum(numbers[x:y])
while (sum_of_numbers != 7) and (y < len(numbers)):
x = x + 1
y = y + 1
sum_of_numbers = sum(numbers[x:y])
if sum_of_numbers == 7:
return True
else:
return False您只需在您的sum循环中重做while。这样,sum_of_numbers就可以用每个循环和每一个新的索引选择来更新。
https://stackoverflow.com/questions/40856975
复制相似问题