Leron
Дек. 29, 2007 18:56:07
Я немного модефицировал пример из офф. туториала:
def prime(pr):
for n in xrange(2,pr):
for x in xrange(2,n):
print ‘n=’,n,'x=',x,'n%x=',n%x
if n%x==0:
print n,'=',x,'*',n/x
break
else:
print n, ‘- prime number’
Вот вывод
>>> prime(6)
2 - prime number
n= 3 x= 2 n%x= 1
3 - prime number
n= 4 x= 2 n%x= 0
4 = 2 * 2
n= 5 x= 2 n%x= 1
n= 5 x= 3 n%x= 2
n= 5 x= 4 n%x= 1
5 - prime number
Два вопроса:
Поскольку выскочило 2 - prime number, делаю вывод что цикл for x in xrange(2,n): не выполнялся. Почему?
Вот в документации(7.3 The for statement) сказано: A break statement executed in the first suite terminates the loop without executing the else clause's suite. A continue statement executed in the first suite skips the rest of the suite and continues with the next item, or with the else clause if there was no next item. Эээ … получается что else выполняется всегда когда в цикле for x in xrange(а,b) a=b ? Поэтому выскочило 2 - prime number? Или как?
Leron
Дек. 29, 2007 21:02:23
Спасибо Daevaorn, я понял.
Leron
Дек. 30, 2007 10:50:58
код набранный не в шелле работает как то иначе, чем код набранный в шелле:
for i in(1,2):
i
else:
print 'a',i
>>>
a 2
>>>
Это в шелле:
>>> for i in(1,2):
i
else:
print 'a',i
1
2
a 2
Хотелось бы понять в чём разницца:почему в данном случае for сработал как положено, пройдя все два значения, а в первом случае сразу
переключил на else? Вроде бы эта штука >>> не считается отступом - табуляция одинаковая.
Александр Кошелев
Дек. 30, 2007 10:53:59
Leron
в шелле не обязательно писать print. в скрипте обязательно
Leron
Дек. 30, 2007 11:15:16
Ну без print'а выдаёт в таком виде:
1
2
('a', 2)
Мне что требуется понять: почему в скрипте интерпритатор перешёл к else? Вроде сначала i должно быть присвоено 1, потом 2, потом уже выполняется else.
Александр Кошелев
Дек. 30, 2007 11:24:45
Leron
Мне что требуется понять: почему в скрипте интерпритатор перешёл к else? Вроде сначала i должно быть присвоено 1, потом 2, потом уже выполняется else.
так и произошло. просто ты запутался в вводе.где-то не тот индент.
Leron
Дек. 30, 2007 18:29:11
Разобралсо. Дело не в табуляции.
Daevaorn
в шелле не обязательно писать print. в скрипте обязательно
В этом всё дело. Если поставить после for вместо i поставить print i то всё работает как надо.
lukke
Дек. 31, 2007 00:49:13
Чет не пойму, вопрос решен иле не решен, и вчем он заключается: про цикл и элс, или про вывод в шелле? Если не решен, то можно уточнить что нужно?
Leron
Дек. 31, 2007 08:22:52
lukke
Чет не пойму, вопрос решен иле не решен, и вчем он заключается: про цикл и элс, или про вывод в шелле? Если не решен, то можно уточнить что нужно?
Вопрос решён, всё пучком))