【问题标题】:Adding odd numbers in a list在列表中添加奇数
【发布时间】:2014-01-10 13:32:30
【问题描述】:

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

【问题讨论】:

    标签: python


    【解决方案1】:

    你快到了;使用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)
    

    【讨论】:

    • 当您设置 total = 0 时,这到底是在做什么? total += num 有什么作用?
    • @user3081186:您需要在total 中有a 数字才能向其添加更多值。总而言之,以0 开头是一个好的开始。
    • total += num 只是将 num 添加到总数中并将其存储回总数中。
    • @user3081186:total += num 行将num 添加到total 值,将其存储回total。对于数字,total += numtotal = total + num 相同,但更短。
    【解决方案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)
    

    【讨论】:

      【解决方案3】:

      你可以这样做:

      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) 实际上只是打印数字中每个数字的总和:

      如果你需要一个变量来跟踪你的总数,你的 for 循环:

      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
      

      【讨论】:

        【解决方案4】:

        只是以答案的形式快速发表评论。如果您想列出 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)
        

        【讨论】:

          【解决方案5】:

          我相信sum(range(1,end_number,2) 会很好用,而且很简单。

          【讨论】:

            【解决方案6】:

            模运算符“%”是您想要的,并且已经使用过。但是,模返回余数,所以偶数除以 2 的余数是 0。

            所以,你想改变:

            if num % 2 == 1:
            

            if num % 2 == 0:
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2019-03-09
              • 1970-01-01
              • 2020-10-08
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多