最大的回文由3位数的产品制成。我的代码有什么问题?

时间:2018-04-11 20:04:49

标签: python-3.x

def palin(k):
   if(str(k) == str(k)[::-1]):
      return True


p = 0
f = 0

while True:
   for i in range(100,1000):
      for k in range(100,1000):
         f = i*k
         if(palin(f)):
            p = f
   break;

print(p)

我已经知道了解决它的其他方法,但无法理解这段代码的错误。它给出了580085 asnwer。

1 个答案:

答案 0 :(得分:2)

问题是你假设产生的最后一个数字是最大的。这是一个糟糕的假设。 The last 10 palindromes found by your loop plotted.or last 50。希望这是一个永久链接)。你可以看到发现的回文的大小反弹。 906609是发现的 3rd 最后一个回文。

不要无条件地重新分配,而是首先确保数字更大:

for i in range(100,1000):
   for k in range(100,1000):
      f = i*k
      if(palin(f) and f > p): # Here
         p = f

几个附注

palin最好写成:

def palin(k):
   return (str(k) == str(k)[::-1])

明确返回True,并依赖自动None返回看起来很乱。

整个while true ... break部分是不必要的。你想永远循环,但在第一个循环中打破?

只需写下:

def palin(k):
   return (str(k) == str(k)[::-1])

p = 0
f = 0

for i in range(100,1000):
   for k in range(100,1000):
      f = i*k
      if(palin(f) and f > p):
         p = f

print(p)