你可以使用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