为了账号安全,请及时绑定邮箱和手机立即绑定

数组上的偶数奇数模式,其中我输出总和

数组上的偶数奇数模式,其中我输出总和

慕桂英546537 2022-09-27 10:48:22
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


查看完整回答
反对 回复 2022-09-27
?
犯罪嫌疑人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


查看完整回答
反对 回复 2022-09-27
  • 2 回答
  • 0 关注
  • 63 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信