2015-08-28 24 views
0

我希望能夠在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 

所有這一切都需要與負值工作過任何size..I的想不通優雅這個解決方案..

我會喜歡得到一個與任何價值的作品,但我不能找出相當正確的組合,讓它與任何價值的工作......當然我可以暴力forc它會對模數運算進行基本計算,並在各種可能出現的情況下使它與某種邏輯結構一起工作,但是我很想找到一個非常簡單而優雅的解決方案,它可以盲目地以任何價值開箱即用。

這是我目前等級:

回答

2

您的環繞號可以通過去除min從值的偏移量,然後加上偏移再次插入之前在做加法mod (max - min)來計算。下面是應該的numvalminmax任何價值的工作(只要min < max)代碼:

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

和Heck,如果你想優雅 - 爲什麼不直接覆蓋'__iadd__'? 'my_num = Num(min = 0,max = 26,val = 3); my_num + = 25; my_num == 2#True' –