gpt4 book ai didi

python - 在边界内保留任何数字

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:57:25 24 4
gpt4 key购买 nike

我希望能够在 Python 中创建一个存储三个值的类。一个值、一个最小值和一个最大值。这样做的目标是有一个名为 addVal() 的方法,它接受一个数字并将其添加到当前值,问题是如果数字加上我们将当前值移动的值更大比我们存储的最大值,它环绕到最小值并继续前进。

这是我目前的类(class):

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

所有这些都需要与任何大小的负值一起工作..我想不出一个优雅的解决方案..

我很想得到一个适用于任何值的单线,但我想不出让它适用于任何值的非常正确的组合..当然我可以强制它对模数进行基本计算操作并让它在可能出现的各种情况下与某些逻辑结构一起工作,但是我很想找到一个非常简单优雅的解决方案,它可以盲目地使用任何值开箱即用。

这是我现在的类(class):

最佳答案

可以通过删除 min 的偏移量来计算您的环绕数字从值然后做加法 mod (max - min)在再次添加偏移量之前。这是适用于 num 的任何值的代码, valminmax (只要 min < max ):

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

关于python - 在边界内保留任何数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32262077/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com