【问题标题】:Order of conditions in if statement using &&& [duplicate]使用 &&& [重复] 的 if 语句中的条件顺序
【发布时间】:2022-12-31 21:26:37
【问题描述】:

在解决循环排序问题时,出现索引错误。当我检查解决方案时,唯一的错误是我在 if 语句中编写条件的顺序。

这有效

    if nums[i] > 0 and nums[i] <= n and nums[i] != nums[j]:
      nums[i], nums[j] = nums[j], nums[i]

这没有

    if nums[i] > 0 and nums[i] != nums[j] and nums[i] <= n:
      nums[i], nums[j] = nums[j], nums[i]

我试着用谷歌搜索,但不明白为什么一个会起作用而另一个不起作用。如果一切正确,它只会跳入 if 语句,那么为什么顺序很重要?

我希望两者都做同样的事情。当跳入 if 语句时,第二个失败或第三个失败有什么关系呢?无论哪种方式,它都应该跳转到 else 语句。

【问题讨论】:

  • 如果第二次检查已经是False,则不会运行第三次检查。

标签: python if-statement


【解决方案1】:

在代码的第一个版本中,按以下顺序检查条件:

  1. nums[i] > 0
  2. nums[i] <= n
  3. nums[i] != nums[j]

    如果这些条件中的任何一个为 False,则代码不会执行 if 语句内的块。

    在代码的第二个版本中,以不同的顺序检查条件:

    1. nums[i] > 0
    2. nums[i] != nums[j]
    3. nums[i] <= n

      如果其中一个条件具有依赖于先前条件的结果的副作用,则检查条件的顺序可能很重要。例如,考虑以下代码:

      def foo(x):
          if x > 0 and print(x) and x < 10:
              print('Inside if statement')
      
      foo(5)
      

      在这段代码中,打印(x)语句有打印值的副作用X到控制台。执行代码时,值X是5,所以第一个条件x > 0为真且第二个条件打印(x)也是真的。第三个条件x < 10也是True,所以里面的代码如果语句被执行,消息“Inside if statement”被打印到控制台。

      现在考虑以下版本的代码:

      def foo(x):
          if print(x) and x > 0 and x < 10:
              print('Inside if statement')
      
      foo(5)
      

      在这个版本中,条件的顺序不同,并且打印(x)语句是要评估的第一个条件。执行代码时,值X又是 5,而打印(x)语句打印值X到控制台。然而打印()函数总是返回 None,所以第二个条件x > 0为 False,不执行 if 语句中的代码。

      在您的情况下,不清楚为什么如果声明很重要。这些条件没有任何副作用,应始终以相同的顺序进行评估。您的代码中可能存在导致行为差异的其他问题,或者在实现中存在错误循环排序()功能。

【讨论】:

    【解决方案2】:

    两者都是正确的方法。你还犯了其他一些错误。

    代码

    nums=[1,2,3,4,5]
    i=2
    j=3
    n=100
    if nums[i] > 0 and nums[i] != nums[j] and nums[i] <= n:
        nums[i], nums[j] = nums[j], nums[i]
    print(nums)
    

    输出

    [1, 2, 4, 3, 5]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-04
      • 2013-05-18
      • 2018-08-13
      • 2012-12-23
      • 2019-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多