首页 > 解决方案 > if 和 else 的执行如何在 python 中的 while 语句中工作

问题描述

while (S!=[] and (arr[S[len(S)-1]] <= arr[i]  
        if (order=='G') else  arr[S[len(S)-1]] >= arr[i] )):
       print("bla")

1)我想知道何时调用 print 语句

2)if和else的代码执行顺序和工作顺序如何

3)我从未见过任何情况,否则这是我第一次看到

4) 以下代码片段取自
https://www.geeksforgeeks.org/find-next-smaller-next-greater-array/

5)我们可以简化上述条件吗?

标签: arrayspython-3.xsorting

解决方案


让我们稍微解构一下代码:

while (S!=[] and (arr[S[len(S)-1]] <= arr[i]  
        if (order=='G') else  arr[S[len(S)-1]] >= arr[i] )):
       print("bla")

可以改写为:

if order == 'G':
    while (S!=[] and arr[S[len(S)-1]] <= arr[i]):
        print('bla')
else:
    while (S!=[] and arr[S[len(S)-1]] >= arr[i]):
        print('bla')

现在,开始回答:

  1. 只要S不为空并且 inarr最后一个位置S的值大于arrith 位置的值,就会调用 print 语句。由于这是 python,我们可以重写arr[S[len(S)-1]]arr[S[-1]],如果有帮助的话。

  2. Python 中的 if-else 内联语句的工作方式如下a = 2 if condition else 3:如果条件为真,则 a 为 2;否则,它将是 3。这就是为什么它可以被重写为:

if condition:
    a = 2
else:
    a = 3

需要明确的是,即使在其内联形式中,Python首先评估条件,然后才选择值。举一个我想说的例子,这没关系:

a = <thing that raises an exception> if <thing that is False> else <valid thing> 
# a will be <valid thing>, no exceptions will be raised.
  1. 仅此代码段不能真正简化为:
if order == 'G':
    while (S!=[] and arr[S[-1]] <= arr[i]):
        print('bla')
else:
    while (S!=[] and arr[S[-1]] >= arr[i]):
        print('bla')

至于 3. 和 4.,我不知道该怎么回答。


推荐阅读