有没有办法缩短这个 if 语句?

Posted

技术标签:

【中文标题】有没有办法缩短这个 if 语句?【英文标题】:Is there a way to shorten this if statement? 【发布时间】:2020-11-17 02:55:12 【问题描述】:

我正在尝试使如果两个或多个变量为 False,则语句结束;但是按照我的做法,代码占用了太多空间。

if g == False and h == False:
  print("Use a different formula.")
  return
elif g == False and i == False:
  print("Use a different formula.")
  return
elif g == False and c == False:
  print("Use a different formula.")
  return
elif h == False and i == False:
  print("Use a different formula.")
  return
elif h == False and c == False:
  print("Use a different formula.")
  return
elif i == False and c == False:
  print("Use a different formula.")
  return
elif g == False and h == False and i == False:
  print("Use a different formula.")
  return
elif g == False and h == False and c == False:
  print("Use a different formula.")
  return
elif h == False and i == False and c == False:
  print("Use a different formula.")
  return
elif c == False and i == False and g == False:
  print("Use a different formula.")
  return
elif g == False and h == False and i == False and c == False:
  print("Use a different formula.")
  return

这是我所拥有的,它在技术上应该可以工作,但必须有一种方法来缩短它。请帮忙。

【问题讨论】:

不是一个真正的答案,但你不应该使用x == Falsex is Falsenot x 更可取。 另外,如果多个条件导致相同的结果,您可以随时将它们与or 组合成一个条件,这样可以很好地短路。 【参考方案1】:

Python 的布尔值 TrueFalse 在算术上可以分别视为整数 10。所以如果你把它们加在一起,结果小于等于2,那么至少有两个一定是假的。

if g + h + c + i <= 2:
    ...

正如@MadPhysicist 在 cmets 中指出的那样,这是因为boolint 的子类。

【讨论】:

这个想法很好,但实际上并不能帮助将语句更改为更有用的东西。 @MadPhysicist 在这种情况下,您所说的“可用”是什么意思?您是否真的认为单个条件不优于 11 个单独的条件,其余代码重复 11 次? 我现在明白了。您将每次出现的 print("Use a different formula.") 解释为 same 代码的代表。我假设它在每种情况下都是不同的代码。你是绝对正确的。 这只是一种将OP用英文写的条件缩短为“两个或多个变量为False”的方法。 您可能需要明确添加 bool 实际上是 Python 中 int 的子类。

以上是关于有没有办法缩短这个 if 语句?的主要内容,如果未能解决你的问题,请参考以下文章

python if语句太长太丑,有没有办法缩短它[重复]

有没有办法缩短我的代码?

缩短多余的 switch 语句

有没有办法缩短这个while条件?

有没有办法让这个功能更好? [复制]

有没有办法缩短 API 端点 URL,然后针对它发出请求?