如何使用模运算符在两个常量之间绑定一个数?

2024-10-01 09:40:12 发布

您现在位置:Python中文网/ 问答频道 /正文

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循环(while boundX<;min)一起工作的,但是使用模数运算符和编写正确的表达式时遇到了问题。在

例:boundThis(201)应该给我21,boundThis(100)应该给我20。在


Tags: ltreturnif表达式def运算符数字min
1条回答
网友
1楼 · 发布于 2024-10-01 09:40:12

请注意,minmax已经是内置函数,因此不要用这些标识符命名变量,因为您无法执行以下操作(假设您没有尝试在指定的边界内生成一个数字列表):

>>> 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

编辑:

对于wrap-around条件,可以将其视为一个数学问题。正如你所知道的,模运算符本质上是找到除数运算后剩下的余数,所以我们可以使用它。因此,如果偏移量为0到{},那么基本情况非常简单。在

^{pr2}$

但是你想让它偏离某个基值(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

相关问题 更多 >