Python - 确保变量为正数

5 投票
4 回答
47951 浏览
提问于 2025-04-16 23:57

我想找到一个优雅的方法来确保一个变量始终保持为正数。

我有两个变量,它们存储的是正的小数。我会根据一些条件来减少它们的值。最后,我想确保这些变量的值仍然是正数(或者最多为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)
    

撰写回答