在列表中添加奇数

时间:2013-12-21 23:54:11

标签: python

我试图找到给定范围内所有奇数的总和,但我无法弄清楚如何指定哪些数字是奇数。我的教授说使用“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)

6 个答案:

答案 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: