[英]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.