【问题标题】:Difference between if and elif [duplicate]if 和 elif 之间的区别
【发布时间】:2023-01-12 20:20:04
【问题描述】:

我开始解决 LeetCode 问题。但我坚持简单的问题。是的。但我找到了解决方案。我误解了 elif 和 if 语句。谁能解释一下这段代码中 if 和 elif 之间的区别:

ret = []
        for i in range(1, n+1):
            if i % 3 == 0 and i % 5 == 0:
                ret.append('FizzBuzz')
            if i % 3 == 0:
                ret.append('Fizz')
            if i % 5 == 0:
                ret.append('Buzz')
            else:
                ret.append(str(i))
        return ret

如果我将 if 更改为 elif。问题将得到解决。

如果你不明白我的问题,你可以看到问题的描述。

这是problem

仅使用 if 语句的解决方案:

输入:n = 3

输出:[“1”,“2”,“嘶嘶声”,“3”]

预期:[“1”,“2”,“嘶嘶声”]

当我将一些 if s 更改为 elif 时的解决方案:

输出:[“1”,“2”,“嘶嘶声”]

预期:[“1”,“2”,“嘶嘶声”]

【问题讨论】:

  • 当对应的if已经满足时,elif不会被执行。连续的ifs 将不分彼此。

标签: python


【解决方案1】:

Python 将评估所有三个 if 语句以确定它们是否为真。一旦 if elif else 语句中的条件为真,Python 将停止评估其他条件。
因此对于 15,您将在列表中得到三个结果而不是一个正确答案:

In [15]: n = 15

In [16]: if i % 3 == 0 and i % 5 == 0:
    ...:     ret.append('FizzBuzz')
    ...: if i % 3 == 0:
    ...:     ret.append('Fizz')
    ...: if i % 5 == 0:
    ...:     ret.append('Buzz')
    ...: else:
    ...:     ret.append(str(i))
    ...:

In [17]: ret
Out[17]: ['FizzBuzz', 'Fizz', 'Buzz']

【讨论】:

    【解决方案2】:

    将每个 if 块视为一个独立的块,因此当您分配 3 然后在两个循环中它执行最后一个 if 块的 else 部分,在第三次迭代中它执行第一个 if 块但它必须再次执行所有剩余的两个 if块,因为每个 if 块彼此独立,因此它执行最后一个 if 块并找到再次满足条件的 else 部分。

    所以,对于你的问题,每个 if 块都是相互独立的,并且在每次迭代发生时都会执行,但在 elif 中它变成一个单独的块,在每次迭代中只执行一次。

    【讨论】:

      猜你喜欢
      • 2017-12-19
      • 2013-03-28
      • 1970-01-01
      • 2017-09-12
      • 2019-04-19
      • 1970-01-01
      • 1970-01-01
      • 2016-04-16
      • 2016-01-13
      相关资源
      最近更新 更多