Команды цикла, эквивалентные в IDL для python

Просто быстрый вопрос о преобразовании команд цикла в IDL в python.

У меня есть следующая структура цикла в синтаксисе IDL:

for ... do begin
   for ... do begin
      if ...
         ...
      endif else begin
         ....
      endelse
   endfor
endfor

Теперь я бы сказал, что это примерно переводится как

for ... :
   for ... :
      if ...
         ...
      end if else:
         ....
      endelse
   endfor
endfor

В питоне.

Однако я бы сказал, что команды endelse и endfor избыточны? Но чем мне их заменить?


person Community    schedule 14.02.2016    source источник


Ответы (4)


Вы частично правы, вам просто нужно отказаться от endelse и endfor и заменить else if на elif.

for ... :
   for ... :
      if ...:
         ....
      elif:
         ....

Из документации Python приведен пример для If statement:

>>> x = int(raw_input("Please enter an integer: "))
Please enter an integer: 42
>>> if x < 0:
...     x = 0
...     print 'Negative changed to zero'
... elif x == 0:
...     print 'Zero'
... elif x == 1:
...     print 'Single'
... else:
...     print 'More'
...
More

For statement

>>> # Measure some strings:
... words = ['cat', 'window', 'defenestrate']
>>> for w in words:
...     print w, len(w)
...
cat 3
window 6
defenestrate 12
person Forge    schedule 14.02.2016

Группировка Python зависит только от отступов, поэтому вам не нужны end для ваших if и for циклов/групп.

Это действительный код Python:

for i in range(5):
    print(i)
person bastelflp    schedule 14.02.2016

Однако я бы сказал, что команды endelse и endfor избыточны? Но чем мне их заменить?

Вы их ничем не замените.

Из руководства по Python:

тело цикла имеет отступ: отступ — это способ группировки операторов в Python. В интерактивной подсказке вы должны ввести табуляцию или пробел(ы) для каждой строки с отступом. На практике вы подготовите более сложный ввод для Python с помощью текстового редактора; все приличные текстовые редакторы имеют средство автоматического отступа. Когда составной оператор вводится в интерактивном режиме, за ним должна следовать пустая строка, чтобы указать завершение (поскольку синтаксический анализатор не может угадать, когда вы ввели последнюю строку). Обратите внимание, что каждая строка в базовом блоке должна иметь одинаковый отступ.

Чтобы закончить блок, просто вернитесь на предыдущий уровень отступа.

person Chris    schedule 14.02.2016

В python нет endif или endfor. Вы убираете отступ строки, чтобы указать, что elif — это «иначе, если»

for ... :
   for ... :
      if ...:
         ...
      elif...:

Возможно, я неправильно интерпретирую «конец, если начать» как новый оператор if, а не просто как else. В таком случае это

 for ... :
   for ... :
      if ...:
         ...
      else:
         ... 
person OneCricketeer    schedule 14.02.2016
comment
Итак, будет ли это Элиф или что-то еще. (У меня было два ответа, один еще один, один элиф, я более склонен согласиться с вашим ответом, так как у вас более высокая репутация...) - person ; 14.02.2016
comment
Rep ничего не значит, просто я трачу слишком много времени на ответы на вопросы :) elif требует условия, например, if this: do action1, else if that: do action2, else: do action 3. Если вы делаете простое if else между как чет-нечет, где есть только два условия, вы можете просто сделать if, then else и пропустить elif - person OneCricketeer; 14.02.2016