【问题标题】:How To Modify This Code In python to return/print all positive numbers not just one如何在python中修改此代码以返回/打印所有正数而不仅仅是一个
【发布时间】:2019-07-23 05:28:41
【问题描述】:

positive_numbers 函数应返回一个包含非负数 (>=0) 的列表。 但是,目前,它只返回 [3] 而不是值列表。

我尝试了不同的方法来完成这项工作我目前是 python 的初学者,我没有人问这就是为什么如果这对你来说太基础了,你只想学习并看到我的错误,我很抱歉

def positive_numbers(numbers):
    for number in numbers:
        result = []
        result = result + [number]
        if number < 0:
            continue
    return result

预期:函数应该返回一个数字列表

实际:返回唯一值为 3 的列表

错误:调用positive_numbers([1, 2, 3])应该返回[1, 2, 3],但它返回了[3]

【问题讨论】:

  • result 应该在for 循环之外
  • 下面的答案描述了哪里出了问题。我建议您使用:[number for number in numbers if number &gt;= 0]。这个列表理解将创建一个正数列表。
  • @DaruisTV 你说是肯定的,但接着写' 0',对吧?不包括 0?
  • @brentertainer 在这种情况下我想包含 0 所以 >= 0 将是最好的选择,但我仍在学习,我感谢所有反馈和解决方案的想法,以使其更好:)跨度>

标签: python list loops printing return-value


【解决方案1】:

由于result = [],您每次循环迭代都会重置列表。

试试这个:

def positive_numbers(numbers):
    result = []
    for number in numbers:
        if number > 0:
            result = result + [number]
    return result

此外,调试会使这一点变得非常清楚。尝试调试您的代码以更好地理解它。

【讨论】:

    【解决方案2】:

    您必须在 for 循环之外声明 result

    def positive_numbers(numbers):
        result = []
        for number in numbers:
            if number < 0:
                continue
            result.append(number)
        return result
    

    【讨论】:

      【解决方案3】:

      如前所述,您在 for 循环的每次迭代中都设置 results no 一个新的空字符串。此外,if 语句不会进行任何更改,因为在计算时,新数字会附加到结果中。 所以最小的工作变化是:

      def positive_numbers(numbers):
          result = []
          for number in numbers:
              if number  0:
                  continue
              result = result + [number]
          return result
      

      此外,请注意,您可以为此使用列表推导:

      positive_numbers = [number for number in numbers if number >= 0]
      

      或者使用filter:

      positive_numbers = list(filter(lambda num: num>=0, numbers))
      

      请注意,在后一种情况下,如果您不需要输出是列表而是可迭代的,则可以删除 list(...) 部分

      【讨论】:

      • 甚至没有注意到这一点。谢谢,我已经解决了
      【解决方案4】:

      你拥有所有的部分,只是不一定按正确的顺序。这是一个修改后的版本:

      def positive_numbers(numbers):                                                                      
          result = []                                                                                     
          for number in numbers:                                                                          
              if number < 0:                                                                              
                  continue                                                                                
              result = result + [number]                                                                  
          return result
      

      在 for 循环中使用 result = [] 时,每次迭代都会清空结果。然后你无条件地将数字添加到列表中,而不是先检查它是否为负数。在此修改后的第一个中,如果当前数字不是非负数,则循环跳到下一个数字。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-01
        • 2012-03-12
        • 1970-01-01
        • 2021-02-03
        • 1970-01-01
        • 1970-01-01
        • 2016-11-04
        • 2020-06-17
        相关资源
        最近更新 更多