除了Python中的第一个偶数以外,列表中的数字总和?

时间:2017-07-13 18:41:35

标签: python python-3.x

我正在尝试编写一个函数,该函数对列表中第一个偶数除外的所有数字求和。当遇到第一个偶数时,我想到了一个中断函数退出循环,但我无法设法构建它。我需要帮助。感谢。

例如:

数字= [4,6,7,8,9,10] totsum必须是6 + 7 + 8 + 9 + 10 = 40(跳过第一个偶数'4')

这是我不完整的代码:

nmbrs = [4, 6, 7, 8, 9, 10]





def totsum_effen(n):
    #sum the total numbers except for the first even number
    while True:
        sum = 0
        for i in nmbrs:
            if i % 2 == 0:

                break

            sum = sum + i


        return (sum)

8 个答案:

答案 0 :(得分:4)

我只需将其全部加起来并减去第一个偶数(如果存在)。

>>> numbers = [4, 6, 7, 8, 9, 10]
>>> sum(numbers) - next((x for x in numbers if x % 2 == 0), 0)
40

答案 1 :(得分:3)

你可以做的只是对数组求和并减去第一个偶数

nmbrs = [4, 6, 7, 8, 9, 10]

def totsum_effen(nmbrs):
    #sum the total numbers except for the first even number
    even_nmbrs = [num for num in nmbrs if num % 2 == 0]
    temp_sum = sum(nmbrs)
    if len(even_nmbrs) > 0:
        temp_sum -= even_nmbrs[0]
    return temp_sum

答案 2 :(得分:2)

试试这个;

nmbrs = [4, 6, 7, 8, 9, 10]

def totsum_effem():
    nmbrs_copy = nmbrs.copy()
    for index, num in enumerate(nmbrs):
        if num % 2 == 0:
            del nmbrs_copy[index]
            break
    return sum(nmbrs_copy)
>>> print(totsum_effem())
40

答案 3 :(得分:1)

这是另一个pythonic one liner(仅限python3.x):

In [36]: sum(num) - next(filter(lambda x: not x % 2, num + [0]))
Out[36]: 40

答案 4 :(得分:0)

您的代码无法在第一个偶数之前添加奇数。 通过这种方式,您可以进行检查,一旦出现第一个偶数,就跳过该循环并继续循环。

{{1}}

答案 5 :(得分:0)

使用更复杂的代码可以更有效地完成您想要实现的目标,但这需要深入了解Python。我在初学者中重新编写代码,易于理解Python,并解释代码中的一些错误以及很少需要注意的事项。如果你能理解它,请告诉我。

#sum the total numbers except for the first even number  (1)
def totsum_effen(n): #(2)
  sum = 0    #(3)
  ignore_first_even = True   #(4)
  for i in n:
    if(i % 2 == 0 and ignore_first_even):   #(5)
      ignore_first_even = False
      continue
    sum = sum + i
  return (sum)

print(totsum_effen(nmbrs))
  1. 您应该将功能描述放在功能定义块之前的行
  2. 在您的代码中,您从未使用过参数n。传递要在函数中使用的参数,并参考这些参数。
  3. 通常,您希望声明您的变量用于累积或总计for循环或while循环的 oustide 。所以每次循环都不会重置。
  4. 使用展平ignore_first_even忽略第一个偶数,方法是使用ignore_first_even 4 {/ 1}}中的if
  5. 如果数字是偶数且ignore_first_even为真,那么我们将ignore_first_even设置为false。请注意,ignore_first_even永远不能再次设置为true,这样我们只会忽略第一个偶数。然后我们continue进行下一次迭代,而不将此数字添加到我们的sum

答案 6 :(得分:0)

  1. 首先,您可以尝试使用continue,而不是使用break。它只是跳过当前迭代循环中的其余代码并跳转到下一次迭代。

  2. 其次,使用count变量检查列表中的第一个偶数。

  3. 请检查以下代码。这只是上述事情的实现。

    nmbrs = [4, 6, 7, 8, 9, 10]
    
    def totsum_effen(nmbrs) :
        sum = 0
        count = 0
        for i in nmbrs :
            if i%2==0 and count==0 :
                count = count + 1
                continue
            sum = sum + i
        return sum
    print('Printing the sum of all the numbers in the list except the 1st even number....')
    print(totsum_effen(nmbrs))
    

答案 7 :(得分:-2)

def totsum_effen(n):
    #sum the total numbers except for the first even number
    sum = 0
    flag = False
    for val in nmbrs:
        if not flag:
          if val % 2 == 0:
            flag = True
          else:
            sum += val
        else:
          sum = sum + val

    return (sum)

nmbrs = [4, 6, 7, 8, 9, 10]