Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 29, 2007 18:56:07

Leron
От:
Зарегистрирован: 2007-12-11
Сообщения: 59
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите понять пример

Я немного модефицировал пример из офф. туториала:
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? Или как?



Отредактировано (Дек. 29, 2007 18:57:58)

Офлайн

#2 Дек. 29, 2007 20:46:23

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Помогите понять пример

>>> a = 1
>>> list( xrange(a,a) )
[]
>>> for i in (1,2):
...    i
... else:
...    i
...
1
2
2



Офлайн

#3 Дек. 29, 2007 21:02:23

Leron
От:
Зарегистрирован: 2007-12-11
Сообщения: 59
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите понять пример

Спасибо Daevaorn, я понял.



Офлайн

#4 Дек. 30, 2007 10:50:58

Leron
От:
Зарегистрирован: 2007-12-11
Сообщения: 59
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите понять пример

код набранный не в шелле работает как то иначе, чем код набранный в шелле:

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? Вроде бы эта штука >>> не считается отступом - табуляция одинаковая.



Офлайн

#5 Дек. 30, 2007 10:53:59

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Помогите понять пример

Leron
в шелле не обязательно писать print. в скрипте обязательно



Офлайн

#6 Дек. 30, 2007 11:15:16

Leron
От:
Зарегистрирован: 2007-12-11
Сообщения: 59
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите понять пример

Ну без print'а выдаёт в таком виде:
1
2
('a', 2)
Мне что требуется понять: почему в скрипте интерпритатор перешёл к else? Вроде сначала i должно быть присвоено 1, потом 2, потом уже выполняется else.



Офлайн

#7 Дек. 30, 2007 11:24:45

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Помогите понять пример

Leron
Мне что требуется понять: почему в скрипте интерпритатор перешёл к else? Вроде сначала i должно быть присвоено 1, потом 2, потом уже выполняется else.
так и произошло. просто ты запутался в вводе.где-то не тот индент.



Офлайн

#8 Дек. 30, 2007 18:29:11

Leron
От:
Зарегистрирован: 2007-12-11
Сообщения: 59
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите понять пример

Разобралсо. Дело не в табуляции.

Daevaorn
в шелле не обязательно писать print. в скрипте обязательно
В этом всё дело. Если поставить после for вместо i поставить print i то всё работает как надо.



Офлайн

#9 Дек. 31, 2007 00:49:13

lukke
От:
Зарегистрирован: 2007-01-01
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите понять пример

Чет не пойму, вопрос решен иле не решен, и вчем он заключается: про цикл и элс, или про вывод в шелле? Если не решен, то можно уточнить что нужно?



Офлайн

#10 Дек. 31, 2007 08:22:52

Leron
От:
Зарегистрирован: 2007-12-11
Сообщения: 59
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите понять пример

lukke
Чет не пойму, вопрос решен иле не решен, и вчем он заключается: про цикл и элс, или про вывод в шелле? Если не решен, то можно уточнить что нужно?
Вопрос решён, всё пучком))



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version