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) можем ли мы упростить вышеуказанные условия?
Спасибо. Но не могли бы вы сказать, как он будет оцениваться (как следующий код переходит к первому условию без ) означает, что я хочу изменить первое условие, используя if и else, возможно ли это (извините, я пытаюсь быть точным в понимании)



Давайте немного разберем код:
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')
Теперь, чтобы начать отвечать:
Оператор печати вызывается до тех пор, пока S не пусто и значение в arr в последней позиции в S больше, чем значение в arr в i-й позиции. Поскольку это Python, мы можем переписать arr[S[len(S)-1]] как arr[S[-1]], если это поможет.
Встроенный оператор 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.
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., я не уверен, что ответить.
Это тернарный оператор, который означает, что либо истинное выражение, либо ложное выражение будут оцениваться на основе условия, поэтому, если
order == 'G, то условиеwhileпринимает вид:S!=[] and arr[S[len(S)-1]] <= arr[i], иначе условиеwhileравноS!=[] and arr[S[len(S)-1]] >= arr[i]