while循环中if-if-else和if-elif-else的行为差异

时间:2020-06-05 06:14:02

标签: python if-statement while-loop output difference

使用'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)

1 个答案:

答案 0 :(得分:1)

当然有区别! elif代表else if。 在if之后有另一个if时,无论您从第一个if获得的结果如何,都会检查第二个if。

当具有elseelse if(关键点是else)时,仅当第一个if条件变为False时才对语句进行检查。

请注意,如果在第8行中单独使用if,则以下else被“连接”到第二秒,但是使用elif时,所有{{1} }和elses是“同一块”。因此,在第二种情况下,由于始终为ifsy % 30 == 0(并且x并非None),它将永远不会到达y % 30 != 0

相关问题