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

时间:2016-06-10 20:02:55

标签: python math palindrome

我可能做了很多错事,因为我只是一个初学者。但有人请帮帮我吗?目标是打印由两个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])

3 个答案:

答案 0 :(得分:2)

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

每个回文必须是两个三位数字的乘积,因此您需要两个嵌套循环range(100, 1000)。使用x作为您的其他循环变量,您不需要更改代码。

答案 1 :(得分:0)

在打印之前,添加一行:

palindrome.sort()

答案 2 :(得分:0)

基本要点:

  • 将数字转换为字符串时,必须存储结果。
  • 完成后对列表进行排序。
  • 使用右端索引获取最后一个元素
  • 当您找到回文时,请保留整数表单,以便排序正常工作。否则,你得到'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])