Je veux être en mesure d'avoir une classe en Python qui stocke trois valeurs. Une valeur, une valeur min et une valeur max. Le but avec ceci est d'avoir une méthode appelée addVal()
qui prend un nombre et l'ajoute à la valeur actuelle, la capture est si le nombre plus la valeur que nous déplaçons notre valeur actuelle par est plus grand que notre maximum stocké, il s'enroule autour de le min et continue.Conserver n'importe quel nombre dans les limites
Ceci est la classe que j'ai jusqu'à présent:
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
Par exemple:
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
Tout cela doit travailler avec des valeurs négatives aussi de toute size..I ne peut pas comprendre un élégant solution pour cela ..
Je voudrais obtenir un one-liner qui fonctionne avec n'importe quelle valeur, mais je ne peux pas comprendre la combinaison tout à fait juste pour le faire fonctionner avec n'importe quelle valeur.Certainly je peux brute forc e pour faire des calculs de base sur les opérations de module et l'amener à travailler avec une certaine structure logique dans les différents cas qui peuvent survenir mais j'aimerais trouver une solution élégante extrêmement simple qui fonctionne aveuglément avec n'importe quelle valeur.
Voici ma classe actuelle:
Et diable, si vous voulez élégant - pourquoi ne pas simplement passer outre '__iadd__'? 'my_num = Num (min = 0, max = 26, val = 3); my_num + = 25; my_num == 2 # True' –