Найти - Пользователи
Полная версия: Это что за фича?
Начало » Python для новичков » Это что за фича?
1
psyshed
В “Языке программирования 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 и теперь вот так…” не смог.
Почему так?
Не забудьте проверить, вдруг это только у меня.
Vadim
Эээ..у меня 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
sp3
пробелы\табуляция в питоне играют такую же роль что и скобочки в других языках - они выделяют блоки кода.
возможно вы не так скопировали пример себе в идле
psyshed
sp3, отнюдь. Скопируйте сами, попробуйте. (стр.39 указанной книги)
Да даже если и так, почему в примере есть 2, а в моем выводе все начинается с 3?
atr2006
Дело действительно в отступах. Обратите внимание, инструкция 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
psyshed
atr2006
Вот зараза, теперь буду следить за отступами идла, а то ишь, ставит как хочет! Спасибо. :)
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