Как выполнение if и else работает внутри оператора while в python

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

1) Я хочу знать, когда вызывается оператор печати

2) Как порядок выполнения кода и рабочая последовательность if и else

3) Я никогда не видел никаких условий после того, как я впервые увидел

4) Следующий фрагмент кода взят из
https://www.geeksforgeeks.org/find-next-smaller-next-greater-array/

5) можем ли мы упростить вышеуказанные условия?

Это тернарный оператор, который означает, что либо истинное выражение, либо ложное выражение будут оцениваться на основе условия, поэтому, если order == 'G, то условие while принимает вид: S!=[] and arr[S[len(S)-1]] <= arr[i], иначе условие while равно S!=[] and arr[S[len(S)-1]] >= arr[i]

AChampion 20.03.2019 04:16

Спасибо. Но не могли бы вы сказать, как он будет оцениваться (как следующий код переходит к первому условию без ) означает, что я хочу изменить первое условие, используя if и else, возможно ли это (извините, я пытаюсь быть точным в понимании)

mdvenkatesh nuhk 21.03.2019 10:29
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
1
2
38
1

Ответы 1

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

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-й позиции. Поскольку это 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., я не уверен, что ответить.

Другие вопросы по теме