为什么第二个程序有效,但第一个无效?

Rup*_*pak 0 python if-statement modulus

第一:

a = int(input())
if a%4 == 0:
    a += 1
if a%4 != 0:
    a -= 1
print(a)
Run Code Online (Sandbox Code Playgroud)

第二:

a = int(input())
b = a%4
if b == 0:
    a += 1
if b != 0:
    a -= 1
print(a)
Run Code Online (Sandbox Code Playgroud)

tri*_*cot 8

在评估a第二个if条件之前,第一个可能已被修改,因此其行为有所不同:

if a%4 == 0:
    a += 1 # this influences the result of the next IF
if a%4 != 0:
    a -= 1
Run Code Online (Sandbox Code Playgroud)

实际上,在此特定情况下,如果第一个条件为true,则在将1添加到之后a,第二个条件也将为true,因此a再次从中减去1。

所述第二版本在第一存储b所需的条件工作,对结果原始输入值,且仅随后执行的修改a,这是不再玩在作用if条件。在那里,可以确保只有两个if条件之一为真。

但是,大多数只会使用else,从而消除了此问题:

if a%4 == 0:
    a += 1
else:
    a -= 1
Run Code Online (Sandbox Code Playgroud)

  • 只是为了好玩而没有`if`的解决方案:`a + =(1,-1)[bool(a%4)]` (2认同)