Вы можете использовать any()
для проверки таблицы, например, так:
while any(n != 1 for n in table):
# do stuff
Я думаю, что это яснее, чем sum(table) > len(table)
.
Кроме того, как рекомендуется @JoeClacks, используйте константу.
Полное пересмотренное решение:
MAX_DIVISOR = 20
table = list(range(1, MAX_DIVISOR+1))
result = 1
pf = 2
while any(n != 1 for n in table):
assert pf <= MAX_DIVISOR
flag = False
for i,n in enumerate(table):
if n % pf == 0:
table[i] = n//pf
flag = True
if flag:
result *= pf
else:
pf += 1
print(result)
Я добавил assert
, чтобы убедиться, что pf
имеет только правовые ценности; это не нужно, если в коде нет ошибок, но может быть хорошей идеей сделать проверку правильности кода.
Я использовал i
и n
для индекса и номера, а не x
и y
.
Я использовал целочисленный оператор деления Python //
, а не /
, поэтому код будет работать на Python 3.x так же, как на Python 2.x. Также, как я написал оператор print
, он будет одинаково хорошо работать в Python 3.x и Python 2.x.
я изменил отступ на ступеньках 4 пробелов в соответствии с PEP 8.
http://www.python.org/dev/peps/pep-0008/
Примечание: Мне нравится этот алгоритм для решения этой проблемы. Это элегантно. Вы придумали это, получите его из книги или что?
EDIT: На самом деле проблема Эйлера проекта 5 обсуждалась здесь, на StackOverflow. Вот ответ, который я просто сравнил с приведенным выше ответом. Это почти в десять раз быстрее, чем выше. Это немного сложнее!
https://stackoverflow.com/a/8026041/166949
появляется этот вопрос быть не по теме, потому что она принадлежит на HTTP: //codereview.stackexchange .com – jonrsharpe