簡體   English   中英

匯總列表中所有元素但不包括第一個偶數的函數

[英]Function That Sums All Elements in List Up to But Not Including The First Even Number

我正在嘗試編寫一個python函數,將一個列表中的所有元素總計起來,但不包括第一個偶數。 該功能需要通過以下測試:

from test import testEqual

testEqual(sum_of_initial_odds([1,3,1,4,3,8]), 5)
testEqual(sum_of_initial_odds([6,1,3,5,7]), 0)
testEqual(sum_of_initial_odds([1, -7, 10, 23]), -6)
testEqual(sum_of_initial_odds(range(1,555,2)), 76729)

我嘗試了以下方法:

import random

lst = []
def sum_of_initial_odds(nums):
    sum = 0
#test if element is odd number - if it's odd, add it to the previous integer
    for i in lst:
        if i % 2 != 0:
            sum = sum + i
        return sum
#test if element is even number - if it's even, don't include it and break code
        else: 
            if i % 2 == 0:
        break: 

我目前收到解析錯誤:

ParseError: bad input on line 11

這是一行:

else: 

我還能怎么寫這段代碼,以便將元素添加到列表中,但不包括第一個偶數,而又不會出現解析錯誤?

您可以使用itertools.takewhile輕松完成此操作:

>>> import itertools
>>> sum(itertools.takewhile(lambda x: x % 2 == 1, [1,3,1,4,3,8]))
5

當謂詞x % 2 == 1Truetakewhile將從給定的序列中產生元素,即,它將使您所有的數字達到第一個偶數。 sumsum ,將這些值求和。

您有一些問題:

  1. 縮進,其他人已經提到
  2. 您第一次碰到奇數時返回sum 這是如此的不是你想要的。
  3. 您將忽略輸入參數nums並使用空的全局lst
  4. 最低的if是多余的:到達這里時,您已經知道偶數。

通常,將部分結果填充到局部變量中。 在例行程序的最后有一個回報

import random

def sum_of_initial_odds(lst):
    sum = 0
#test if element is odd number - if it's odd, add it to the previous integer
    for i in lst:
        if i % 2 != 0:
            sum = sum + i
#test if element is even number - if it's even, don't include it and break code
        else: 
            break

    return sum

print sum_of_initial_odds([1,3,1,4,3,8]) == 5
print sum_of_initial_odds([6,1,3,5,7]) == 0
print sum_of_initial_odds([1, -7, 10, 23]) == -6
print sum_of_initial_odds(range(1,555,2)) == 76729

由此輸出的是四個True值。

您也可以使用

def sum(numbers):
    sum = 0
    for number in numbers:
        if number % 2 == 0:
            break
        else:
            sum += number
    return sum

並使用asset語句(這是raise語句的一種特殊形式)進行測試,優點是僅當__debug__為true時,它才會引發AssertionError ,從而避免在生產中引發異常。

assert sum([1,3,1,4,3,8]) == 5 , "Your message if assertion fails"

您可以通過以下方式關閉__debug__

  • 使用python -O啟動交互模式
  • 將變量PYTHONOPTIMIZE設置為True

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM