如何在不使用if语句的情况下检查数字是否在范围内?蟒蛇

时间:2018-09-26 02:11:50

标签: python arrays loops if-statement boolean

我希望函数在数字落入设置范围内时返回true,例如[2,9) 我首先想到的是使用这样的for循环

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

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

5 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

您的数字不一定是整数的解决方案:

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

答案 2 :(得分:0)

对于整数,您几乎不需要自定义函数,内置的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 :(得分:0)

或者这个:

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

答案 4 :(得分:-1)

如果您由于某种原因不能使用“ if”,我想您可能会滥用其他条件。

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