[英]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 == 1
為True
, takewhile
將從給定的序列中產生元素,即,它將使您所有的數字達到第一個偶數。 sum
, sum
,將這些值求和。
您有一些問題:
通常,將部分結果填充到局部變量中。 在例行程序的最后有一個回報 。
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.