如何在python中找到由两个三位数字组成的最大回文?

时间:2016-03-24 02:36:26

标签: python math palindrome

当我遇到问题时,我在Project Euler上尝试了问题4。这是我的代码。

def Problem4():
    x = 100
    y = 909
    a = []
    b = []
    x1 = []
    y1 = []
    while y < 1000:
        while x < 1000:
            z = x*y
            if str(z) == str(z)[::-1]:
                a.append(z)
                x1.append(x)
                y1.append(y)
            else:
                b.append(z)
            x = x + 1
        y = y + 1       
    print(a)
    print(x1)
    print(y1)
Problem4()

此代码运行正常,但即使在y = y + 1之后,y的值仍保持不变。它为什么这样做?有没有更好的方法来做到这一点。

3 个答案:

答案 0 :(得分:1)

我得到了解决方案。 y未增加的原因是因为x的值未从1000重置。它只是自动跳过那段代码,因为x的值已经是1000.这是我改进的代码,它也按顺序对数组进行排序。

def Problem4():

    y = 100
    a = []
    x1 = []
    y1 = []
    while y < 1000:
        y = y + 1
        x = 100
        while x < 1000:
            z = x*y
            if str(z) == str(z)[::-1]:
                a.append(z)
            x = x + 1

    a.sort()
    print(a)
Problem4()

答案 1 :(得分:1)

x = 100行移动到第一个while循环和第二个while循环之间的位置,以解决您的问题。

def Problem4():
    y = 909
    a = []
    b = []
    x1 = []
    y1 = []
    while y < 1000:
        x = 100
        while x < 1000:
            z = x*y
            if str(z) == str(z)[::-1]:
                a.append(z)
                x1.append(x)
                y1.append(y)
            else:
                b.append(z)
            x = x + 1
        y = y + 1       
    print(a)
    print(x1)
    print(y1)
Problem4()

答案 2 :(得分:1)

至于“更好”,你可能想要使用xrange():

a = []
for y in xrange(909, 1000):
  for x in xrange(100, 1000):
    x = x * y
    if str(z) = str(z)[::-1]:
      a.append(z)
a.sort()
print a