使用'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)
答案 0 :(得分:1)
当然有区别! elif
代表else if
。
在if
之后有另一个if
时,无论您从第一个if获得的结果如何,都会检查第二个if。
当具有else
或else if
(关键点是else)时,仅当第一个if
条件变为False
时才对语句进行检查。
请注意,如果在第8行中单独使用if
,则以下else
被“连接”到第二秒,但是使用elif
时,所有{{1} }和elses
是“同一块”。因此,在第二种情况下,由于始终为ifs
或y % 30 == 0
(并且x并非None),它将永远不会到达y % 30 != 0
!