在Python

时间:2018-04-04 14:32:41

标签: python

有没有办法在Python中指定float变量的边界?例如,当我导入数据时,我想检查它是否在min <= variable <=max的某个范围内。此外,如果可能的话,如果导入的值超出这些边界(甚至丢失),我想为这个变量分配一个特定的值。

如果变量是浮点数,我也许可以做第一部分。

def var_check(x,lower_bound=3,upper_bound=30):
    rng = range(lower_bound,upper_bound+1)
    if x not in rng:
        return (upper_bound-lower_bound)/2
    else:
        return x

x = var_check(5)返回5,而x = var_check(50)返回13。

关于如何为float变量执行此操作的任何想法?

3 个答案:

答案 0 :(得分:5)

您几乎可以完成您在问题中所写的内容:

def var_check(x, lower_bound=3, upper_bound=30):
    if lower_bound <= x <= upper_bound:
        return x
    else:
        return (upper_bound - lower_bound) / 2

顺便说一句,你应该对整数做同样的事情,至少在Python 2中。在Python 3中(或在Python 2中使用xrange),它并不重要。

答案 1 :(得分:0)

解决方案可能如下所示:

def var_check(x, lower_bound=3, upper_bound=30):
    if x >= lower_bound and x <= upper_bound:
        return x
    return (upper_bound-lower_bound)/2

print(var_check(2.5))
print(var_check(15.5))
print(var_check(33.5))

输出

13.5
15.5
13.5

答案 2 :(得分:0)

您可以定义一个类并覆盖其__float__

class MyFloat:
   def __init__(self, num, upper=20, lower=10):
       self.num = num
       self.upper = upper
       self.lower = lower

   def __float__(self):
       if self.lower <= self.num <= self.upper:
           return float(self.num)
       else:
           return (self.upper - self.lower) / 2

然后在导入数据时可以执行

>>> data = [1,2,3,10,11,12,21,22,23]
>>> [float(MyFloat(d)) for d in data]
>>> [5.0, 5.0, 5.0, 10.0, 11.0, 12.0, 5.0, 5.0, 5.0]