2

此代码旨在查找由两个 3 位数字的乘积创建的最大回文数。

我确信有更有效的方法来解决这个问题,欢迎您发布它们,但在我学习的这个阶段,我最感兴趣的是如何编辑我编写的代码使其正常工作。

当我运行这段代码时,它正确地创建了一个排序的回文列表,但列表中的最大数字是 99,999。我不明白为什么该列表没有超出此范围。

def palindromes():
    product_list=[]
    palindrome_list=[]
    for a in range(100,1000):
        for b in range(100,1000):
            product_list.append(a*b)
    for product in product_list:
        product = str(product)
        if len(product) % 2 == 0:
            if product[0]==product[5] and product[1]==product[4] and product[2]==product[3]:
                palindrome_list.append(product)
        if len(product) % 2 != 0:
            if product[0]==product[4] and product[1]==product[3]:
                palindrome_list.append(product)

    palindrome_list = sorted(set(palindrome_list))
    return palindrome_list

print(palindromes()) 
4

2 回答 2

2

你的代码正在做你告诉它做的事情。

与您的假设相反,您的列表中有很多大于 99,999 的数字

我已经执行了你的代码,列表中的第一个结果是:101101 这显然是> 99999.

但是还有其他更大的561165888888,它们也在您的列表中。

该列表总共包含650回文。这些是您唯一可以使用您的开始条件生成的

无法达到 999,999,因为在您的for循环中无法达到...

Python 只是按照你说的去做。

编辑:就像奥斯卡的回答说的那样,你应该把你的限制设置为1001,然后回文999,999就会出现在你身上。

于 2013-04-04T22:57:48.423 回答
1

那是因为这部分是不正确的:

palindrome_list.append(product)

您正在排序字符串,而不是数字 - 即使所有结果都出现在列表中,它们被排序为字符串,并且以与您预期不同的顺序出现。在出现的两个地方更改上面的代码,它应该是这样的:

palindrome_list.append(int(product))

现在很容易看出由两个 3 位数字(列表中的最后一个数字)的乘积创建的最大回文数是多少:

palindromes()[-1]
=> 906609
于 2013-04-04T22:43:13.193 回答