编写一个函数lucky_sevens(numbers),它接受一个数组 如果任何三个连续元素总和为7,则返回true。
为什么这不会产生True的输出?最后3个值sum = 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]))
答案 0 :(得分:1)
如
那样简单 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
您的错误来自您的while循环。当你循环时,sum_of_numbers
保持不变。相反,您必须为while循环中的每个新x
和y
更新它。
另外,else: return False
这样的重复内容可以简化为return False
,因为如果sum_of_numbers == 7
为假,它只能到达该行。
最后,x = x + 1
可以用更常见的简写x += 1
编写,与y = y + 1
相同。
答案 1 :(得分:1)
当函数首次被调用时,sum_of_numbers
变量被分配了列表中前3个值之和的值,并且永远不会使用新的x
{{{ 1}}值,您可能想要创建一个回调函数来实现该行为。
目前,您需要将y
语句移至sum
循环,以便使用新的while
,x
值更新总和:< / p>
y
答案 2 :(得分:0)
这应该是诀窍:
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
在该列表中,那么有3个连续数字总和为7
。否则,就没有了。
需要注意的是,进行此类列表理解需要列表中包含3个以上的元素。这就是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
会更新每个循环和每个新的索引选择。
答案 3 :(得分:0)
此代码返回Array中的连续元素,其总和为7,并为初始元素的索引。
function lucky_seven(arr){
let i=0;
let lastIndex = 0;
if(arr.length < 3){
return false;
}
while(i <= lastIndex){
let sum = 0;
lastIndex = i + 3;
let subArr = arr.slice(i,lastIndex);
if(subArr.length === 3) {
sum = subArr.reduce((acc, cur) => acc + cur);
if(sum === 7){
return {
subArr: subArr,
index: i
};
}
i++;
} else{
return false;
}
}
}
lucky_seven([3,2,1,4,2])
答案 4 :(得分:0)
我只是用了这个
def lucky_sevens(numbers):
x = 0
y = False
for i in numbers:
if i == 7:
x += 7
if x == 21:
y = True
else:
x = 0
return y
答案 5 :(得分:0)
desc = [
v["description"]
for _, value in topHitsDict.items()
for k, v in value.items()
if "hit" in k
]
答案 6 :(得分:0)
这里有一些非常有趣的回复。以为我也会分享我的工作。
import numpy as np
import matplotlib.pyplot as plt
q = (135 / 56)
z = -(1 / 8)
r = -(2 / 7)
m = 7 / 8
p = 5 / 7
j = np.power(0.1, -3.5)
a = np.power(0.2, -3.5)
n = np.arange(-5, 6)
x = np.where(n < 0, q * np.power(0.9, n) + z * np.power(0.1, n) + r * np.power(0.2, n),
np.where((n >= 0) & (n < 4), q * np.power(0.9, n) + m * np.power(0.1, n) + p * np.power(0.2, n),
q * np.power(0.9, n) + m * np.power(0.1, n) + p * np.power(0.2, n) + j + a))
plt.stem(n, x)
plt.show()
其输出将是:
def lucky_seven(num_list):
if len(num_list) < 3: return False
return any([True if sum(num_list[i:i+3]) == 7 else False for i in range(len(num_list)-2)])
print ('lucky seven for [1,2,3] is :',lucky_seven([1,2,3]))
print ('lucky seven for [3,4] is :',lucky_seven([3,4]))
print ('lucky seven for [3,4,0] is :',lucky_seven([3,4,0]))
print ('lucky seven for [1,2,3,4,5,1,1] is :',lucky_seven([1,2,3,4,5,1,1]))
print ('lucky seven for [1,2,3,4,-2,5,1] is :',lucky_seven([1,2,3,4,-2,5,1]))