Как работает оператор if и else внутри оператора while в python - PullRequest
1 голос
/ 20 марта 2019
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) можем ли мы упростить вышеуказанные условия?

1 Ответ

0 голосов
/ 21 марта 2019

Давайте немного разберем код:

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 не является пустым, а значение в arr в последней позиции в S больше, чем значение в arr в i th позиция. Поскольку это python, мы можем переписать arr[S[len(S)-1]] как arr[S[-1]], если это поможет.

  2. Встроенный оператор if-else в Python работает следующим образом: 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., я не уверен, что ответить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...