【问题标题】:Behavioural difference of if-if-else and if-elif-else in a while loopif-if-else 和 if-elif-else 在 while 循环中的行为差异
【发布时间】:2020-06-05 06:14:02
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    当有elseelse if(关键点是else)时,只有当第一个if 条件结果是False 时才会检查语句。

    请注意,当在第 8 行单独使用 if 时,以下 else 将“连接”到第二个 if,但是当使用 elif 时,所有 elsesifs 都是“同一块”。所以在第二种情况下,因为它总是 y % 30 == 0y % 30 != 0(并且 x 不是 None)它永远不会到达 break

    【讨论】:

    • 嗨,snatchysquid,感谢您的快速回复。我理解使用 else-if 和 if 之间的区别,但没有注意到 if 和 else 语句是相连的(正如你在上一段中提到的那样),这让我一直在思考我是否误解了它们之间的差异。跨度>
    • 那么你了解这个过程吗?
    • 是的,我明白为什么它现在只为第一种情况执行一次。而不是程序在 if 和 else-if 语句之间重新循环的意图。
    • 可爱!如果这有助于您考虑支持/将此答案标记为正确:)
    猜你喜欢
    • 2023-03-22
    • 1970-01-01
    • 2017-07-03
    • 1970-01-01
    • 2015-11-13
    • 2012-06-18
    • 2017-05-03
    • 2015-10-28
    • 2021-03-07
    相关资源
    最近更新 更多