def boundThis(x):
min = 20
max= 100
boundX = int(x)
if (boundX > max):
boundX = boundX % max + min-1
if (boundX > max):
boundX-=max-1
else:
while(boundX < min):
boundX += max-min
return boundX
我试图在两个数字之间绑定x,20和100(不包括)。也就是说,一旦达到100,就应该回到20。
我得到了它如何与while循环一起工作,(虽然boundX&lt; min)但是我遇到了模数运算符的麻烦并且用它写了正确的表达式。
实施例。 boundThis(201)应该给我21,并且boundThis(100)给我20。
答案 0 :(得分:7)
请注意min
和max
已经内置了函数,因此请不要使用这些标识符命名变量,因为您可以执行以下操作(假设您不是尝试生成指定范围内的数字列表):
>>> def bound(low, high, value):
... return max(low, min(high, value))
...
>>> bound(20, 100, 1000)
100
>>> bound(20, 100, 10)
20
>>> bound(20, 100, 60)
60
编辑:
对于环绕条件,将此视为数学问题。如你所知,模运算符基本上可以找到除数上除法运算剩余的余数,因此我们可以使用它。因此,如果偏移量为0
到n
,则基本情况非常简单。
>>> 99 % 100
99
>>> 101 % 100
1
但是你希望它偏离某个基础值(low
),所以你必须应用基础数学并将问题减少到上面的那个。我建议你在阅读下面的解决方案之前尝试自己解决这个问题。
>>> def bound(value, low=20, high=100):
... diff = high - low
... return (((value - low) % diff) + low)
...
>>> bound(0)
80
>>> bound(19)
99
>>> bound(20)
20
>>> bound(100)
20
>>> bound(99)
99