【问题标题】:Taking Parameters and Returning Results with tuples and integers使用元组和整数获取参数并返回结果
【发布时间】:2021-05-23 01:23:19
【问题描述】:

我正在尝试返回我的一个参数 (nums_tuple) 中大于或等于 min_value 的所有值的总和,如下所示:

def add_numbers(nums_tuple, min_value):
    for n in nums_tuple:
        if nums_tuple[n] += min_value:
            return
total = add_numbers((21, 4, 7, 19, 1), 15)
print(total)

结果应该是 40 作为 21 + 19,因为它们是我的元组中大于我的其他参数 (min_value) 的值的整数 我在某个地方出错了,看不到哪里......有人可以提供一些建议吗?谢谢

【问题讨论】:

  • 这行不通。如果 nums_tuple[n] += min_value

标签: python function tuples


【解决方案1】:

+= 运算符将值添加到现有变量。您需要使用>= 运算符来检查某个值是否超过或等于某个值。您的代码还有其他几个问题,例如不返回值。这更像是pythonic:

sum(x for x in nums_tuple if x >= min_value)

【讨论】:

    【解决方案2】:

    就像我在 cmets 中所说的那样。 if nums_tuple[n] += min_value 不会工作。相反,我认为您想检查该数字是否大于>

    def add_numbers(nums_tuple, min_value):
        return sum([num for num in nums_tuple if num > min_value])
    total = add_numbers((21, 4, 7, 19, 1), 15)
    

    这个问题可以使用列表推导来解决。

    40
    

    另外,我想指出,这完全是不必要的。您已经在遍历列表,无需访问列表中的元素。如果nums_tuple 中的元素都大于len(nums_tuple),这将不起作用。你会得到 indexError

    for n in nums_tuple:
        nums_tuple[n]
    

    【讨论】:

    • 我在里面搞砸了,我和你在一起!感谢您的帮助,非常感谢
    【解决方案3】:

    要接近您的代码,请尝试以下操作:

    def add_numbers(nums_tuple, min_value):
        total = 0
        for n in range(len(nums_tuple)):
            if nums_tuple[n] >= min_value:
                total += nums_tuple[n]
        return total
    
    total = add_numbers((21, 4, 7, 19, 1), 15)
    print(total)
    

    在您的原始代码中,您输入了nums_tuple[n] += min_value,这意味着“将min_value 添加到nums_tuple[n]”(即声明)。这不是if 所期望的(至少在python 中):您需要输入一些对或错的表达式,例如Truenums_tuple[n] >= min_value

    顺便说一句,您实际上并不需要执行复杂的 for 循环。

    def add_numbers(nums_tuple, min_value):
        return sum([n for n in nums_tuple if n >= min_value])
    

    足够了。

    【讨论】:

    • 你的答案是 Stack Overflow 上写得最好的答案,我为你感到骄傲!有一些可以改进的地方,例如用for n in nums_tuple 替换for n in range(len(nums_tuple)) 并删除sum 中使用的列表理解中的括号,但这些事情甚至不会触及你的答案的完美。跨度>
    • 太神奇了,你拯救了我的夜晚!非常感谢:)
    • @enzo 谢谢!第一点也在我的脑海中,但我认为 OP 想使用 n 作为索引,所以我保持原样。至于第二点,我完全同意你的看法!虽然我知道,但我经常忘记删除括号。
    • 我同意 - 答案非常清晰,而且解释得非常好!
    • @Jose 很高兴它有帮助!
    【解决方案4】:

    您似乎对 Python 编程语言仍然缺乏了解,因此仅解释您代码中的几个关键错误:

    1- 当你说 for n in num_tuple 时,这意味着你正在获取元组中的每个元素,而不是索引(如果你想要索引,你会做 for i in range(len(num_tuple))

    2- 当你说nums_tuple[n] += min_value 时,你的 if 语句应该是一个条件,而不是一个赋值,这只会更新值,它不会像第一点讨论的那样工作,你正在循环遍历元素,而不是索引,所以你需要类似if n > min_value

    3- 将所有大于最小值的数字相加后,您的回报应该在最后

    工作代码

    def add_numbers(nums_tuple, min_value):
        result = 0
        for n in nums_tuple:
            if n > min_value:
                result += n
        return result
    total = add_numbers((21, 4, 7, 19, 1), 15)
    print(total)
    

    【讨论】:

    • 我完全同意你的看法——我了解 Python 还为时过早。谢谢你的解释,非常感谢:)
    • 随时何塞!我建议从 Udemy Python 从零到英雄学习 Python,这对初学者来说是一门很棒的课程,我在早期阶段自己学习过
    【解决方案5】:
    def add_numbers(nums_tuple, min_value):
        values = filter(lambda x: x > min_value, nums_tuple)
        return sum(values)
    

    在这种情况下,过滤器函数也是一个不错的选择,因为它们只传递序列中满足提供为 True 的条件的值。第二个参数是您要迭代的序列。但是,由于过滤器函数返回过滤器对象,如果您想显式查看满足条件的值,则需要使用 list() 函数来解包这些值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-21
      • 2017-04-28
      • 2021-06-15
      • 2011-05-27
      • 2022-01-10
      • 1970-01-01
      相关资源
      最近更新 更多