【问题标题】:How can I check if a number is in a range without using if statements? Python如何在不使用 if 语句的情况下检查数字是否在范围内? Python
【发布时间】:2019-03-01 17:10:16
【问题描述】:

我希望函数在数字落在设定范围内时返回 true,例如 [2,9) 我的第一个想法是使用这样的 for 循环

def in_an_interval(number):
    for i in range(2, 8):
        return print(bool(i==number))

但它只对第一个值返回 true,2 有什么想法吗?谢谢。

【问题讨论】:

  • 这里几乎不需要自定义函数,内置函数就足够了:result = number in range(2, 8)
  • 为什么不简单地2 <= number < 9

标签: python arrays loops if-statement boolean


【解决方案1】:

或者这个:

def in_an_interval(number):
    return 2<number<9

【讨论】:

    【解决方案2】:

    对于整数,你几乎不需要自定义函数,内置的range 就足够了:

    result = number in range(2, 8)
    

    虽然对于大多数用例来说这可能是矫枉过正,但您可以定义一个适用于浮点数的小类:

    import math
    
    class Interval:
        def __init__(self, start, end):
            assert start <= end
            self.start = start
            self.end  = end
        def __contains__(self, number):   # this dunder method lets you use 'in'
            return self.start <= number < self.end
    
    
    interval = Interval(math.e, 2 * math.pi)
    print((2 * math.e) in interval)
    print((4 * math.e) in interval)
    

    输出:

    True
    False
    

    【讨论】:

      【解决方案3】:

      我猜你可能会滥用另一个条件,如果你因为某种原因不能使用“if”。

      def in_an_interval(number):
          while number >=2 and number < 9:
              return True
          return False
      

      【讨论】:

      • 对于那些对我投反对票的人,如果你能解释为什么我的回答对于“如何在不使用 if 语句的情况下检查一个数字是否在一个范围内?”这个问题没有用处,那就太好了。
      【解决方案4】:

      如果您正在运行 Python 3 并处理整数,则可以直接在 range 对象上使用 in 运算符:

      def in_an_interval(number):
          return number in range(2, 9)
      

      这非常快(简单的数学计算),因为range 对象有一个.__contains__ 方法。还要注意range不包括结尾,即range(2, 8)在这里实际上是“2、3、4、5、6、7”,所以我给你改成了range(2, 9)

      如果你的意思是“数字”,包括浮点数,那么你最好使用比较运算符:

      def in_an_interval_float(number):
          return 2 <= number < 9
      

      您不可能使用 range 测试任意浮点数,因为它是用于这项工作的错误工具。


      您当前的代码是错误的,因为它在for 循环的第一次迭代中从整个函数中返回:

      def in_an_interval(number):
          for i in range(2, 8):
              return print(bool(i==number))
      

      您可能希望仅在找到时返回,并在未找到时返回False

      def in_an_interval(number):
          for i in range(2, 8):
              if i == number:
                  return True
          return False
      

      【讨论】:

      • 安德鲁说的是“数字”,而不是整数,这个答案不适用于浮点数。
      • @AaronBentley 听起来很有道理。我已经编辑了我的答案。
      【解决方案5】:

      当你的数字不一定是整数时的解决方案:

      def in_an_interval(number):
          return number >= 2 and number < 9
      

      【讨论】:

        猜你喜欢
        • 2013-10-02
        • 2013-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-09
        • 1970-01-01
        • 2011-12-09
        • 1970-01-01
        相关资源
        最近更新 更多