欧拉计划:最大的回文 (Python)。我做错了什么?

Project Euler: Largest palindrome (Python). What did I do wrong?

我可能做错了很多事情,因为我只是一个初学者。但是有人可以帮助我吗?目标是打印由两个 3 位数的乘积组成的最大回文。谢谢

palindromes = []
for i in range(100, 1000):
    for x in range(100, 1000):
        a = x*i
        str(a)
        b = a[::-1]
        if a == b :
            palindromes.append(a)

print (palindromes[len(palindromes) - 1])

您在定义代码之前在代码中使用了 x,因此该代码会出错。您还有其他错误:您应该能够使用回溯轻松找到它们。一个逻辑错误是你找到了 a 的字符串,但没有把它存储在任何地方,所以它丢失了。您还可以从 a 作为整数开始,然后尝试将其设为字符串:将您的类型分开,除非您有充分的理由更改类型。您应该使用更好的变量名称:a,b,i,x 是糟糕的名称。写下它们的意思!多输入几个字符是便宜的并且可以防止错误。

每个回文必须是两个个三位数的乘积,所以你需要两个个嵌套循环range(100, 1000).使用 x 作为你的另一个循环变量,你不需要改变你的代码。

打印前,添加行:

palindrome.sort()

基本要点:

  • 将数字转换为字符串时,必须存储结果。
  • 完成后对列表进行排序。
  • 使用右端索引获取最后一个元素
  • 当你找到回文时,保持整数形式,这样排序就可以正常进行。否则,你会得到 '99999' 作为最大的回文。

代码:

palindromes = []
for i in range(100, 1000):
    for x in range(100, 1000):
        a = str(x*i)
        b = a[::-1]
        if a == b :
            palindromes.append(int(a))

print (sorted(palindromes)[-1])