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

3

我正在尝试使语句在两个或更多变量为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 == False。要么使用 x is False,要么只使用 not x 更好。 - Mad Physicist
此外,如果多个条件导致相同的结果,您始终可以将它们组合成一个带有“or”的单个条件,这样可以很好地进行短路处理。 - Mad Physicist
1个回答

9
Python 的布尔值 True 和 False 可以与整数 1 和 0 进行算术运算。所以,如果将它们加在一起,结果小于或等于 2,则至少有两个布尔值为 False。
if g + h + c + i <= 2:
    ...

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

这个想法不错,但实际上并没有帮助将语句转化为更可用的形式。 - Mad Physicist
@MadPhysicist 在这个上下文中,您所说的“可用”是什么意思?您真的认为一个条件不比重复11次其余代码的11个单独条件更好吗? - kaya3
我现在明白了。你认为每次出现 print("Use a different formula.") 都是代表相同的代码。而我以为每次都是不同的代码。你是完全正确的。 - Mad Physicist
这只是一种缩短 OP 用英语写成的条件“两个或更多变量为 False”的方法。 - kaya3
当然。我完全误读了问题。我以为它会比实际情况更复杂。选票肯定翻转了。这是正确的做法。 - Mad Physicist
2
你可能想明确说明在Python中bool实际上是int的子类。 - Mad Physicist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接