【问题标题】:Python one liner conditional return with for loopPython 单线条件返回与 for 循环
【发布时间】:2017-04-16 07:23:56
【问题描述】:

作为一个班轮,我该如何做到这一点?

def get_sum(a,b):
    return sum(for i in range (a,b)) if a != b else a

我尝试了一些不同的方法,但使用 for 循环我无法让它工作。

谢谢!

错误:

文件“”,第 2 行 返回总和(对于范围内的 i (a,b))如果 a != b else a ^ SyntaxError: 无效语法

【问题讨论】:

  • 这看起来已经像一个班轮了。
  • 它不起作用
  • 你想让它做什么?我不明白你的for i in range(a,b) 声明。
  • 给定两个整数,可以是正数也可以是负数,求包含它们之间的所有数的和并返回。如果两个数字相等,则返回 a 或 b。
  • 我含糊地说对不起

标签: python


【解决方案1】:

编辑: OP 澄清了get_sum 函数的意图,我已经相应地调整了我的答案:

。 . .找到包括它们之间的所有数字的总和并返回它。如果两个数字相等,则返回 ab


你的生成表达式应该采用i for i in range(a, b)的形式(注意额外的i):

def get_sum(a, b):
    return sum(i for i in range(min(a, b), max(a, b) + 1))

一个更短的版本是完全放弃生成器构造,因为ranges 是可迭代的:

def get_sum(a, b):
    return sum(range(min(a, b), max(a, b) + 1))

但是,我无法准确说出您的方法的目的是什么。 . . get_sum(10, 11) 真的应该返回与get_sum(10, 10) 相同的结果吗?

【讨论】:

  • 好的,谢谢。看到这个后我开始工作: def get_sum(a, b): mini = min(a,b) maxi = max(a,b) return sum(i for i in range (mini,maxi+1)) if mini != maxi else maxi
  • @michael_b:不需要if ... else ... 部分:如果没有a == b,您的解决方案已经给出了正确的值。
  • @MarkDickinson 正是我要提到的。我刚刚完成了对示例的编辑以适应问题描述。
【解决方案2】:

与:

    return sum(for i in range (a,b)) if a != b else a

您可能正在尝试执行以下操作:

   ("return sum( range (a,b) ) if a != b else a")

【讨论】:

  • 在发布您自己的答案之前,请检查现有答案是否解决了您想要的相同点。
  • @gyre 只是为了澄清我当时开始回答时没有答案。谢谢
猜你喜欢
  • 2015-12-30
  • 1970-01-01
  • 2012-08-18
  • 2013-10-13
  • 1970-01-01
  • 2019-07-31
  • 1970-01-01
  • 2021-12-17
相关资源
最近更新 更多