Найти - Пользователи
Полная версия: Странная кодовая конструкция
Начало » Python для новичков » Странная кодовая конструкция
1
Eliont
У меня щас случилась вот такая конструкция:
        
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 относится и когда срабатывает?
Soteric
http://docs.python.org/reference/compound_stmts.html#the-for-statement

else относится к последнему for. Выполняется в случаях, если итерация по циклу завершилась корректно без вызова break. Т.е. в конкретном случае всегда.
Eliont
Глянул док.
То есть можно назначить ещё какие действия в случае если цикл прерван, как finally в исключениях?
Ed
Скорее наоборот, если цикл не прерван.
py.user.next
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 гарантирует, что цикл выполнился полностью
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB