你可以使用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/
注:我很喜欢这个算法,解决这个问题。它很优雅。你是否创造了这个,从书中得到它,或者是什么?
编辑:其实,项目欧拉问题5已经在StackOverflow这里讨论过。这是一个答案,我只是比较上述答案。这个比上面几乎快十倍。这有点棘手,但!
https://stackoverflow.com/a/8026041/166949
这个问题似乎是题外话,因为它属于在http://codereview.stackexchange .com – jonrsharpe