Найти - Пользователи
Полная версия: Помогите понять пример
Начало » Центр помощи » Помогите понять пример
1
Leron
Я немного модефицировал пример из офф. туториала:
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? Или как?
Александр Кошелев
>>> a = 1
>>> list( xrange(a,a) )
[]
>>> for i in (1,2):
...    i
... else:
...    i
...
1
2
2
Leron
Спасибо Daevaorn, я понял.
Leron
код набранный не в шелле работает как то иначе, чем код набранный в шелле:
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? Вроде бы эта штука >>> не считается отступом - табуляция одинаковая.
Александр Кошелев
Leron
в шелле не обязательно писать print. в скрипте обязательно
Leron
Ну без print'а выдаёт в таком виде:
1
2
('a', 2)
Мне что требуется понять: почему в скрипте интерпритатор перешёл к else? Вроде сначала i должно быть присвоено 1, потом 2, потом уже выполняется else.
Александр Кошелев
Leron
Мне что требуется понять: почему в скрипте интерпритатор перешёл к else? Вроде сначала i должно быть присвоено 1, потом 2, потом уже выполняется else.
так и произошло. просто ты запутался в вводе.где-то не тот индент.
Leron
Разобралсо. Дело не в табуляции.
Daevaorn
в шелле не обязательно писать print. в скрипте обязательно
В этом всё дело. Если поставить после for вместо i поставить print i то всё работает как надо.
lukke
Чет не пойму, вопрос решен иле не решен, и вчем он заключается: про цикл и элс, или про вывод в шелле? Если не решен, то можно уточнить что нужно?
Leron
lukke
Чет не пойму, вопрос решен иле не решен, и вчем он заключается: про цикл и элс, или про вывод в шелле? Если не решен, то можно уточнить что нужно?
Вопрос решён, всё пучком))
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