while 循环中 if-if-else 和 if-elif-else 的行为差异
Behavioural difference of if-if-else and if-elif-else in a while loop
当使用 'if-if-else' 条件时,我无法获得我想要的输出。但是,使用 'if-elif-else' 效果很好。我尝试过跟踪,但不明白输出差异的原因。我不确定为什么它会在 'if-if-else' 案例执行 1 次后爆发,为什么它不像使用 'if-elif' 时那样执行。
代码如下:除了第 8 行 'if' 被替换为 'elif' 之外,它们完全相同
1.if-if-else
x = 1
y = 0
while True:
if (x is not None ) & (y%30!=0):
y+=1
x=5
print("x=",x)
if y%30==0: #line8
print("ENTERED y=",y)
y-=29
else:
break
2.if-elif-else
x = 1
y = 0
while True:
if (x is not None ) & (y%30!=0):
y+=1
x=5
print("x=",x)
elif y%30==0: #line8
print("ENTERED y=",y)
y-=29
else:
break
输出如下:
1.if-if-else
ENTERED y= 0
x= 5
2.if-elif-else
ENTERED y= 0
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
ENTERED y= 0
x= 5
x= 5
x= 5
x= 5
...(prints x=5 for another 29-4 =25 times)
ENTERED y= 0
...(loops endlessly)
当然有区别! elif
代表 else if
。
当在 if
之后有另一个 if
时,无论您从第一个 if.
获得的结果如何,都会检查第二个 if
当有 else
或 else if
(关键点是 else)时,仅当第一个 if
条件结果为 [=17 时才会检查语句=].
请注意,当第 8 行单独使用 if
时,后面的 else
是 "connected" 到第二个 if,但是当使用 elif
所有elses
和 ifs
是 "the same block"。所以在第二种情况下,因为它总是 y % 30 == 0
或 y % 30 != 0
(并且 x 不是 None),所以它永远不会到达 break
!
当使用 'if-if-else' 条件时,我无法获得我想要的输出。但是,使用 'if-elif-else' 效果很好。我尝试过跟踪,但不明白输出差异的原因。我不确定为什么它会在 'if-if-else' 案例执行 1 次后爆发,为什么它不像使用 'if-elif' 时那样执行。
代码如下:除了第 8 行 'if' 被替换为 'elif' 之外,它们完全相同
1.if-if-else
x = 1
y = 0
while True:
if (x is not None ) & (y%30!=0):
y+=1
x=5
print("x=",x)
if y%30==0: #line8
print("ENTERED y=",y)
y-=29
else:
break
2.if-elif-else
x = 1
y = 0
while True:
if (x is not None ) & (y%30!=0):
y+=1
x=5
print("x=",x)
elif y%30==0: #line8
print("ENTERED y=",y)
y-=29
else:
break
输出如下:
1.if-if-else
ENTERED y= 0
x= 5
2.if-elif-else
ENTERED y= 0
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
x= 5
ENTERED y= 0
x= 5
x= 5
x= 5
x= 5
...(prints x=5 for another 29-4 =25 times)
ENTERED y= 0
...(loops endlessly)
当然有区别! elif
代表 else if
。
当在 if
之后有另一个 if
时,无论您从第一个 if.
当有 else
或 else if
(关键点是 else)时,仅当第一个 if
条件结果为 [=17 时才会检查语句=].
请注意,当第 8 行单独使用 if
时,后面的 else
是 "connected" 到第二个 if,但是当使用 elif
所有elses
和 ifs
是 "the same block"。所以在第二种情况下,因为它总是 y % 30 == 0
或 y % 30 != 0
(并且 x 不是 None),所以它永远不会到达 break
!