【问题标题】:Replacing an if-statement替换 if 语句
【发布时间】:2018-09-19 22:23:25
【问题描述】:

我不能在我的作业中使用 if 语句和循环,所以我想知道如何重写这一行:

  if (not float(gravity).is_integer()):

它只是检查重力是浮点数还是整数,以便它可以传递更多代码。

【问题讨论】:

  • 你能用try/except吗?
  • 是的,我想是的。
  • 快速提问,为什么要将它转换为浮点数来测试它是整数还是浮点数?
  • @javax 重新阅读我的评论。在某些语言中这可能是禁忌,但在 Python 中,可以使用 try/except 来控制 Python 中的流程
  • 我只是在问,因为如果你的输出在浮点数和整数之间变化,那么你可以使用 isinstance(gravity, int)isinstance(gravity, float),但这证实了你绝对不能使用它们

标签: python loops if-statement


【解决方案1】:

我的猜测是该作业试图教你"Ask forgiveness not permission"的范式。

在这种情况下:

try:
    gravity = float(gravity)
    # Do floaty gravity stuff
except (TypeError, ValueError):
    gravity = some_default_value_you_can_handle_some_other_way

【讨论】:

    【解决方案2】:

    您可以使用快捷运算符来实现无需 if 语句的逻辑流。 例如

    float(gravity).is_integer() and do_stuff()
    

    第二部分只有在第一部分为真时才会执行。

    你也可以使用

    float(gravity).is_integer() or do_stuff()
    

    第二部分只有在第一部分为假时才会执行。

    更新

    我刚刚阅读了有关该函数如何仅用于评估两侧是否产生整数斜边的评论。因此,除非我误解了您在这里的目标,否则,重点是您不需要 if 语句来决定您是否应该自己显式返回 True 或 False;您可以直接返回 is_integer() 的评估输出,因为无论如何这将评估为 True 或 False。

    【讨论】:

      【解决方案3】:

      您可以将 assert 与 try 块结合使用:

      try:
          assert(not float(gravity).is_integer())
          print("evaluated to true")
      except:
          print("evaluated to false")
      

      用您要执行的代码替换打印语句,以防它评估为真或假。

      【讨论】:

      • 太棒了;一个不可恢复的位置:P
      • assert 不应该用于检查这样的值。它的目的是检查程序逻辑。如果引发 AssertionError 则表示程序逻辑无效,需要修改程序。
      • @PM 2Ring 我同意,但这里是关于一个简单的程序,他只需要替换ifs。我怀疑断言实际上揭示了一些错误的逻辑是否如此复杂。目前,这是一个明确的解决方案。虽然我明白你的意思以及这可能不是一个好主意。感谢您的反馈
      • 很公平。我猜奇怪的分配规范可以证明奇怪的代码是合理的。 ;) 我只是不希望人们看到 assert 被用来验证数据,因为他们可能认为这就是 assert 的用途。
      猜你喜欢
      • 1970-01-01
      • 2014-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-12
      • 1970-01-01
      • 1970-01-01
      • 2013-10-27
      相关资源
      最近更新 更多