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

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]) => 393

even_odd([1,2,3]) => 5

even_odd([0,2,3]) => 3

even_odd([1,0,3]) => 3

even_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。我只是想知道我的逻辑有什么缺陷,是否有人有更好的方法来解决这个问题,既高效又干净。


慕桂英546537
浏览 64回答 2
2回答

郎朗坤

你的问题是对Codewars(https://www.codewars.com/kata/559e708e72d342b0c900007b)的挑战,所以也许你应该使用这个平台与其他竞争者讨论解决方案,而不是Stackoverflow。这个挑战的要点是研究计算的模式,而不是代码本身。如果您知道所需的模式,代码很容易(剧透!def even_odd(arr):&nbsp; &nbsp; num = 0&nbsp; &nbsp; for i, e in enumerate(arr):&nbsp; &nbsp; &nbsp; &nbsp; if (i % 2) == 0:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; num += e&nbsp; &nbsp; &nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; num *= e&nbsp; &nbsp; return num

犯罪嫌疑人X

这将产生所需的结果:from operator import add, muldef even_odd(nums):&nbsp; &nbsp; acc = nums[0]&nbsp; # accumulator&nbsp; &nbsp; ops = [mul, add]&nbsp; &nbsp; i = 0&nbsp; &nbsp; for num in nums[1:]:&nbsp; &nbsp; &nbsp; &nbsp; acc = ops[i](acc, num)&nbsp; &nbsp; &nbsp; &nbsp; i = 1 - i&nbsp; # alternates between the two operators&nbsp; &nbsp; return acc
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python