在边界中保留任何数字

2024-04-19 16:09:35 发布

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

我希望能够在Python中有一个存储三个值的类。值、最小值和最大值。这样做的目的是要有一个名为addVal()的方法,它获取一个数字并将其添加到当前值,关键是如果该数字加上我们正在移动的当前值大于存储的最大值,它将返回到最小值并继续运行

这是我到目前为止的课程:

class Num:
    def __init__(self, min = 0, max = 26, val = 0):
        self.min = min
        self.max = max
        self.val = val

    def setMin(self, min):
        self.min = min

    def setMax(self, max):
        self.max = max

    def addVal(self, num):
        if num+self.val > self.max:
            # Only works with values when num%max + val is greater than max
            self.val = min + (num%val - (max-(num%val)))
        else:
            self.val += num

例如:

num = Num(0, 65, 60) # num = Num(min, max, val)
num.val # returns 60
num.addVal(15)
num.val # returns 10 (because we can use 5 of the 15 before going over the max and having a remaining ten to add to the min)
num.addVal(20)
num.val # returns 30
num.addVal(265)
num.val # # returns 35

所有这些都需要处理任何大小的负值。我想不出一个优雅的解决方案

我很想得到一个适用于任何值的线性函数,但我无法找到一个合适的组合,使它适用于任何值。当然,我可以强迫它对模运算进行基本计算,并使它适用于各种可能出现的情况下的一些逻辑结构,但是我很想找到一个简单优雅的解决方案,只是开箱即用,盲目地使用任何价值

这是我目前的课程:


Tags: thetoself目的def数字val解决方案
1条回答
网友
1楼 · 发布于 2024-04-19 16:09:35

可以通过从值中删除min的偏移量,然后在再次添加偏移量之前进行mod (max - min)相加来计算您的环绕数。以下代码适用于numvalminmax的任何值(只要min < max):

def addVal(self, num):
    self.val = self.min + (self.val + num - self.min) % (self.max - self.min)

相关问题 更多 >