Python 查找由两个2位数字的乘积构成的最大回文

Python 查找由两个2位数字的乘积构成的最大回文,python,Python,最大回文(1009801) 当我执行这段代码时,出现的错误是TypeError:“int”对象不可下标。 我需要知道此代码中的问题是什么,以及将进行哪些更改以使此代码运行。您需要强制转换为字符串,以便能够反转和比较: def largest_palindrome(n1,n2): mylist = [x for x in range(n1,n2)] for y in mylist: if y == y[::-1]: print(y)

最大回文(1009801)

当我执行这段代码时,出现的错误是TypeError:“int”对象不可下标。
我需要知道此代码中的问题是什么,以及将进行哪些更改以使此代码运行。

您需要强制转换为字符串,以便能够反转和比较:

def largest_palindrome(n1,n2):
    mylist = [x for x in range(n1,n2)]
    for y in mylist:
        if y == y[::-1]:
            print(y)
        else:
            pass    
作为一个班轮: 作为一个单线发电机 (感谢@Austin的评论):


Reblochon的答案并不能解决这个问题,因为它只在两个两位数的最小和最大数字之间进行迭代。它不会遍历两位数

next(x for x in range(9801, 100, -1) if str(x) == str(x)[::-1])
返回:

def largest_palindrome():
    lastBiggestProduct = 0;
    lastBiggestNumb = 10;
    for firstNum in range(10,100):
        a = list(range(lastBiggestNumb,firstNum))
        a.extend(range(firstNum+1,100))
        for secondNum in a:
            prod = firstNum*secondNum
            if(prod>lastBiggestProduct and str(prod) == str(prod)[::-1]):
                lastBiggestProduct = firstNum*secondNum
                lastBiggestNumb = secondNum
    return lastBiggestProduct


print(largest_palindrome())

同样,只需反向迭代,这样您遇到的第一个将是最大的!你仍然生成整个列表,这是低效的,而不是
max
,我更喜欢生成器上的
next
,比如:
next(x代表x在范围内(9801100,-1),如果str(x)==str(x)[::-1])
。谢谢你的代码解决了我的问题。非常感谢!!甚至
…对于地图中的x(str,范围(9801100,-1))…
。您的代码与标题不匹配。假设您修复了,所以
y
是一个str,那么您仍然只找到范围内最大的回文组(n1,n2)。2位数字的乘积应该在哪里?不要自己实现
max
,试着找到一种使用内置数字的方法<代码>来自itertools进口产品;max(x*y代表x,y在乘积中(范围(10100),repeat=2)如果str(x*y)==str(x*y)[::-1])John La Rooy你的答案也很好,而且是“itertools”的一个很好的实现(可能也更快)实际上,我在这里懒得使用
product
来修剪内部范围-
max(x*y代表范围(10100)对于范围(x100)内的y,如果str(x*y)==str(x*y)[::-1])
。这将使测试减少一半。我想这也可能更清楚。不管怎样,它仍然是
O(n^2)
max([x for x in range(9801, 100, -1) if str(x) == str(x)[::-1]])
next(x for x in range(9801, 100, -1) if str(x) == str(x)[::-1])
def largest_palindrome():
    lastBiggestProduct = 0;
    lastBiggestNumb = 10;
    for firstNum in range(10,100):
        a = list(range(lastBiggestNumb,firstNum))
        a.extend(range(firstNum+1,100))
        for secondNum in a:
            prod = firstNum*secondNum
            if(prod>lastBiggestProduct and str(prod) == str(prod)[::-1]):
                lastBiggestProduct = firstNum*secondNum
                lastBiggestNumb = secondNum
    return lastBiggestProduct


print(largest_palindrome())
9009