Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 12, 2010 15:27:33

Eliont
От:
Зарегистрирован: 2010-05-30
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

Странная кодовая конструкция

У меня щас случилась вот такая конструкция:

        
for i in range(len(strings)):
while True:
count = 0
for char in strings[i]:
if char == " ": count+=1
count /= 4
strings[i] = strings[i].lstrip()

for j in xrange(count): strings[i] = "$ "+strings[i]
else: break
Это ошибка. Но интерпретатор пропустил, программа отработала (хотя и неправильно) и не зависла.

Но я не понял - а к чему else относится и когда срабатывает?



Офлайн

#2 Дек. 12, 2010 16:03:39

Soteric
От:
Зарегистрирован: 2010-09-19
Сообщения: 352
Репутация: +  20  -
Профиль   Отправить e-mail  

Странная кодовая конструкция

http://docs.python.org/reference/compound_stmts.html#the-for-statement

else относится к последнему for. Выполняется в случаях, если итерация по циклу завершилась корректно без вызова break. Т.е. в конкретном случае всегда.



Офлайн

#3 Дек. 12, 2010 18:29:27

Eliont
От:
Зарегистрирован: 2010-05-30
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

Странная кодовая конструкция

Глянул док.
То есть можно назначить ещё какие действия в случае если цикл прерван, как finally в исключениях?



Офлайн

#4 Дек. 12, 2010 18:37:59

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Странная кодовая конструкция

Скорее наоборот, если цикл не прерван.



Офлайн

#5 Дек. 13, 2010 02:25:41

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9960
Репутация: +  856  -
Профиль   Отправить e-mail  

Странная кодовая конструкция

Eliont
Но я не понял - а к чему else относится и когда срабатывает?
>>> while True:
... for i in range(3):
... print(i + 1)
... else:
... break
...
1
2
3
>>>
else относится к for, а содержимое выполняется после for

>>> while True:
... for i in range(5):
... print(i + 1)
... if i == 3:
... break
... else:
... break
...
1
2
3
4
1
2
3
4
эта повисает

>>> n = 0
>>> while n < 10:
... print(n + 1)
... n += 1
... else:
... print('while loop end')
...
1
2
3
4
5
6
7
8
9
10
while loop end
>>> n = 0
>>> while n < 10:
... print(n + 1)
... if n == 5:
... break
... n += 1
... else:
... print('while loop end')
...
1
2
3
4
5
6
>>>
да, видимо else гарантирует, что цикл выполнился полностью



Отредактировано (Дек. 13, 2010 03:35:42)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version