Давайте немного разберем код:
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
th позиция. Поскольку это 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., я не уверен, что ответить.