<p>李子已经给了你很好的建议!让我们举一个小例子来说明他的意思,假设你有一个算法来确定n是否是基思数,还有一个测试循环来打印一些基思数:</p>
<pre><code>def keith_number(n):
c = str(n)
a = list(map(int, c))
b = sum(a)
while b < n:
a = a[1:] + [b]
b = sum(a)
return (b == n) & (len(c) > 1)
N = 5
for i in range(N):
a, b = 10**i, 10**(i + 1)
print("[{0},{1}]".format(a, b))
print([i for i in filter(keith_number, range(a, b))])
print('-' * 80)
</code></pre>
<p>这样的片段给了你:</p>
<pre><code>[1,10]
[]
[10,100]
[14, 19, 28, 47, 61, 75]
[100,1000]
[197, 742]
[1000,10000]
[1104, 1537, 2208, 2580, 3684, 4788, 7385, 7647, 7909]
[10000,100000]
[31331, 34285, 34348, 55604, 62662, 86935, 93993]
</code></pre>
<p>哇,太棒了。。。但是等等,假设你不了解基思数函数,你想探索一下算法,以便理解它的本质。如果我们添加一些有用的调试行呢?你知道吗</p>
<pre><code>def keith_number(n):
c = str(n)
a = list(map(int, c))
b = sum(a)
print("{0} = {1}".format("+".join(map(str, a)), b))
while b < n:
a = a[1:] + [b]
b = sum(a)
print("{0} = {1}".format("+".join(map(str, a)), b))
return (b == n) & (len(c) > 1)
keith_number(14)
print '-' * 80
keith_number(15)
</code></pre>
<p>这样你就可以追踪重要的步骤,算法在你的头脑中也会有意义:</p>
<pre><code>1+4 = 5
4+5 = 9
5+9 = 14
1+5 = 6
5+6 = 11
6+11 = 17
</code></pre>
<p>结论:我建议您学习如何调试自己的代码,而不是询问陌生人;-)</p>