我试图找到给定范围内所有奇数的总和,但我无法弄清楚如何指定哪些数字是奇数。我的教授说使用“for num in numbers”来访问范围内的元素。这是我到目前为止所做的。
numbers = range(0, 10)
def addOddNumbers(numbers):
for num in numbers:
if num % 2 == 1:
return sum
print sum(numbers)
if __name__ == '__main__':
addOddNumbers(numbers)
答案 0 :(得分:3)
num % 2
是测试奇数和偶数的正确方法。
return
在执行时退出函数。遇到第一个奇数时,函数会返回。
如果您使用循环,请不要使用sum()
,只需直接添加数字:
def addOddNumbers(numbers):
total = 0
for num in numbers:
if num % 2 == 1:
total += num
print total
你可以首先为sum()
建立一个奇数列表:
def addOddNumbers(numbers):
odd = []
for num in numbers:
if num % 2 == 1:
odd.append(num)
print sum(odd)
对于sum()
,您可以使用生成器表达式:
def addOddNumbers(numbers):
print sum(num for num in numbers if num % 2 == 1)
答案 1 :(得分:2)
我可以建议对Martijn Pieter的优秀答案进行一些小调整吗?
为了使您的方法更灵活,请尝试将范围合并到方法中。它将使您的方法能够对任何列表中的奇数值求和。另外,我打开你的方法签名,使其符合Python样式指南PEP8,只是在这里挑剔:)
def add_odd_numbers(max_list_value):
numbers = range(0, max_list_value)
total = 0
for num in numbers:
if num % 2 == 1:
total += num
return total
if __name__ == '__main__':
print add_odd_numbers(10)
答案 2 :(得分:1)
你可以这样做:
def addOddNumbers(numbers):
return sum(num for num in numbers if num % 2 == 1) # or use print instead of return
如果使用return,要打印它,您将在函数调用之前使用print语句:
print addOddNumbers(numbers)
您的语句return sum
只返回sum
函数(没有其他内容)并退出addOddNumbers
函数。
print sum(numbers)
实际上只打印了数字中每个数字的总和:
total = 0
for n in numbers:
if n % 2 == 1:
total += n # total accumulates the sum of all odd numbers then you can return or print it
答案 3 :(得分:0)
只是以答案的形式做出快速评论。如果你想列出0到10之间的所有奇数,那么终点并不重要。如果列表从0到11,则结束点很重要。请记住range(0,11) = [0,1,2,3,4,5,6,7,8,9,10]
,但不包括11。
现在解释正在使用的生成器。要使用您定义的numbers
进行列表,您可以执行此操作。
odds = []
for num in numbers:
if num % 2 == 1:
odds.append(num)
这会给你odds = [1,3,5,7,9]
。 Python有一些调用列表理解,使得这样做很容易。以上可以像这样轻松编写
odds = [num for num in number if num % 2 == 1]
并且由于你想要总和列表中的所有数字以及sum
函数列表,所以答案就是
sum([num for num in number if num % 2 == 1])
请注意,大部分答案都没有括号。这是因为没有它它就变成了发电机。
odds = (num for num in number if num % 2 == )
print odds #--> <generator object <genexpr> at 0x7f9d220669b0>
odds.next() # 1
odds.next() # 3
...
由于sum
也采用了这些,并且生成器比列表更快,内存密集度更低,这就是为什么最好的答案是
sum(num for num in numbers if num % 2 == 1)
答案 4 :(得分:0)
我相信sum(range(1,end_number,2)
会很好,也很容易。
答案 5 :(得分:-2)
模运算符“%”是您想要的,并且已经使用过。但是,modulo返回余数,因此偶数除以2的余数为0。
所以,你想改变:
if num % 2 == 1:
到
if num % 2 == 0: