创建范围限制的int或float对象或函数

时间:2015-03-06 14:58:41

标签: python

限制int或float范围的最佳(加载项...)。

在python中,它们基本上是无限的但是我想要"钳位"在+ -10处的int,同样会导致两个任意限制之间的环绕(如数字) 例如

编辑此作品

 def wrapped(x, L, H):
    return ((x-L) % (H-L))+L

3 个答案:

答案 0 :(得分:2)

如果我理解正确,你可以使用mod运算符来限制(a,b)之间的范围:

def clamped(x, a, b):
  return ((x - a) % b) + a

首先,将x标准化为0,然后按b进行修改,然后将修改后的值恢复为开始。

然后,环绕也会起作用!

答案 1 :(得分:1)

当你试图分配一个高于你的范围的值时,我会做一个简单的课程并使用%包围它。

class NewInt:
    def __init__(self, value=0, range=10):
        self.value = value
        self.range = range

    def set(self, number):
        self.value = number % self.range

    def get(self):            # just in case you don't want to call to obj.value
        return self.value

答案 2 :(得分:1)

更自然的类实现。

class IntOverflow(Exception):
    pass


class LimitedInt(object):
    def __init__(self, value, range):
        self._value = value
        self._range = range

    def __add__(self, some_int):
        return abs(self._value + some_int) <= self._range and (self._value + some_int) or self._error()

    @staticmethod
    def _error():
        raise IntOverflow

    def __repr__(self):
        return repr(self._value)

    def __str__(self):
        return str(self._value)


a = LimitedInt(3, 10)
print(a + 3)
print(a + 10) 

输出

6
...IntOverflow...