限制int或float范围的最佳(加载项...)。
在python中,它们基本上是无限的但是我想要"钳位"在+ -10处的int,同样会导致两个任意限制之间的环绕(如数字) 例如
编辑此作品
def wrapped(x, L, H):
return ((x-L) % (H-L))+L
答案 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...