Write a function that takes an array/list of numbers and returns a number.See the examples and try to guess the pattern:even_odd([1,2,6,1,6,3,1,9,6]) => 393even_odd([1,2,3]) => 5even_odd([0,2,3]) => 3even_odd([1,0,3]) => 3even_odd([3,2]) => 6 def even_odd(arr): count = 0 index = 0 length = len(arr) while index < length: for num in range(len(arr)): if arr[index] % 2 != 0: count += arr[index] index += 1 else: count *= arr[index] index += 1 return count所以基本上模式是将前2个数字相乘并添加第三个数字,我将其设置为每个索引值的位置,如果它是第一个数字,我会将其添加到计数中以保持跟踪,然后将其与第二个数字相乘,然后添加第三个数字。我通过了3/4个样本案例,除了一个---> even_odd的第一个([1,2,6,1,6,3,1,9,6])=> 393。我只是想知道我的逻辑有什么缺陷,是否有人有更好的方法来解决这个问题,既高效又干净。
2 回答
郎朗坤
TA贡献1921条经验 获得超9个赞
你的问题是对Codewars(https://www.codewars.com/kata/559e708e72d342b0c900007b)的挑战,所以也许你应该使用这个平台与其他竞争者讨论解决方案,而不是Stackoverflow。
这个挑战的要点是研究计算的模式,而不是代码本身。
如果您知道所需的模式,代码很容易(剧透!
def even_odd(arr):
num = 0
for i, e in enumerate(arr):
if (i % 2) == 0:
num += e
else:
num *= e
return num
犯罪嫌疑人X
TA贡献2080条经验 获得超4个赞
这将产生所需的结果:
from operator import add, mul
def even_odd(nums):
acc = nums[0] # accumulator
ops = [mul, add]
i = 0
for num in nums[1:]:
acc = ops[i](acc, num)
i = 1 - i # alternates between the two operators
return acc
添加回答
举报
0/150
提交
取消