Python - 确保变量为正数
我想找到一个优雅的方法来确保一个变量始终保持为正数。
我有两个变量,它们存储的是正的小数。我会根据一些条件来减少它们的值。最后,我想确保这些变量的值仍然是正数(或者最多为0)。伪代码大致是这样的:
list = [...]
value1 = N
value2 = M
for element in list:
if ... :
value1 -= X
if ... :
value2 -= Y
有没有比在最后加两个ifs
更优雅的解决方案呢?
4 个回答
5
对于浮点数,我喜欢Constantinius提到的这个方法:max(0, value)
。你甚至可以把它和减法结合起来,用元组解包一次性处理两个值:
value1, value2 = max(0, value1-1), max(0, value2-1)
这里有一些只针对整数的小技巧(顺便说一下,因为我之前发过这些,没意识到你在处理浮点数):
在减法时,你可以使用这个方法:
value -= value and 1
假设这个值总是大于等于0,这样就不会让它变成负数。
当值为零时,这个操作会变成value -= 0
。当值不为零时,它会变成value -= 1
。
你也可以使用三元运算符,这样更容易理解:
value -= 1 if value > 0 else 0
10
在每次循环结束的时候,使用 value1 = max(0, value1)
,对 value2
也做同样的处理。
31
我不太明白你想要做什么;数字变量要么是负数,要么不是(不可能同时是两者)。
如果你是反复减少一个变量的值,然后想检查它是否变成了负数,可以用一个
if
语句来做——这就是它的用途!if value < 0: # do stuff
如果你认为这些变量 不应该 是负数,并且想在代码中确认这一点,你可以这样做:
assert value > 0
这样做可能会引发一个
AssertionError
错误,如果条件不成立的话(assert
只有在 Python 以调试模式运行时才会执行)。如果你希望变量在减少到0以下时变为0,可以这样做:
value = max(value, 0)
如果你希望变量在是负数时变为正数,可以这样做:
value = value if value > 0 else -value
或者这样:
value = abs(value)