Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 22, 2010 22:15:46

psyshed
От:
Зарегистрирован: 2010-11-22
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Это что за фича?

В “Языке программирования Python” увидел пример:

>>>  for  n  in  xrange(2, 10): 
... for x in xrange(2, n):
... if n % x == 0:
... print n, "=", x, "*", n/x
... break
... else:
... print n, "- простое число"
...
2 - простое число
3 - простое число
4 = 2 * 2
5 - простое число
6 = 2 * 3
7 - простое число
8 = 2 * 4
9 = 3 * 3
Вбил я значит этот пример в IDLE(Python 2.7)
и получил:
3 -простое число
4 = 2 * 2
5 -простое число
5 -простое число
5 -простое число
6 = 2 * 3
7 -простое число
7 -простое число
7 -простое число
7 -простое число
7 -простое число
8 = 2 * 4
9 -простое число
9 = 3 * 3
Стало интересно, но придумать ничего лучше чем “Ну, наверное, всё-таки что-то изменилось с 2001 года в IDLE и теперь вот так…” не смог.
Почему так?
Не забудьте проверить, вдруг это только у меня.



Офлайн

#2 Ноя. 22, 2010 22:23:54

Vadim
От:
Зарегистрирован: 2010-11-18
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Это что за фича?

Эээ..у меня Python 3.1 запустил через Eric Python IDE, итог работы

3 -  easy number
4 = 2 * 2
5 - easy number
5 - easy number
5 - easy number
6 = 2 * 3
7 - easy number
7 - easy number
7 - easy number
7 - easy number
7 - easy number
8 = 2 * 4
9 - easy number
9 = 3 * 3



Офлайн

#3 Ноя. 22, 2010 22:31:51

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

Это что за фича?

пробелы\табуляция в питоне играют такую же роль что и скобочки в других языках - они выделяют блоки кода.
возможно вы не так скопировали пример себе в идле



Офлайн

#4 Ноя. 22, 2010 22:49:57

psyshed
От:
Зарегистрирован: 2010-11-22
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Это что за фича?

sp3, отнюдь. Скопируйте сами, попробуйте. (стр.39 указанной книги)
Да даже если и так, почему в примере есть 2, а в моем выводе все начинается с 3?



Отредактировано (Ноя. 22, 2010 22:53:30)

Офлайн

#5 Ноя. 22, 2010 23:15:07

atr2006
От:
Зарегистрирован: 2010-11-22
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Это что за фича?

Дело действительно в отступах. Обратите внимание, инструкция else относится не к if, а к for (sic!).

Неправильный код:

for  n  in  xrange(2, 10): 
for x in xrange(2, n):
if n % x == 0:
print n, "=", x, "*", n/x
break
else:
print n, "- простое число"
даёт неправильный результат:
3 -  простое число
4 = 2 * 2
5 - простое число
5 - простое число
5 - простое число
6 = 2 * 3
7 - простое число
7 - простое число
7 - простое число
7 - простое число
7 - простое число
8 = 2 * 4
9 - простое число
9 = 3 * 3
Правильный код:
for  n  in  xrange(2, 10): 
for x in xrange(2, n):
if n % x == 0:
print n, "=", x, "*", n/x
break
else:
print n, "- простое число"
и результат даёт правильный:
2 -  простое число
3 - простое число
4 = 2 * 2
5 - простое число
6 = 2 * 3
7 - простое число
8 = 2 * 4
9 = 3 * 3



Офлайн

#6 Ноя. 22, 2010 23:52:04

psyshed
От:
Зарегистрирован: 2010-11-22
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Это что за фича?

atr2006
Вот зараза, теперь буду следить за отступами идла, а то ишь, ставит как хочет! Спасибо. :)



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version