最高回文,python中有3位数字

Fab*_*ook 7 python math logic palindrome

http://projecteuler.net/的问题4中,它说:

回文数字两种方式相同.由两个2位数字的乘积制成的最大回文是9009 = 91*99.

找到由两个3位数字的乘积制成的最大回文.

我这里有这个代码

def isPalindrome(num):
    return str(num) == str(num)[::-1]
def largest(bot, top):
    for x in range(top, bot, -1):
        for y in range(top,bot, -1):
            if isPalindrome(x*y):
                return x*y
print largest(100,999)
Run Code Online (Sandbox Code Playgroud)

它应该找到最大的回文,它吐出580085我认为是正确的,但项目欧拉不这么认为,我在这里有什么不对吗?


当我尊敬for循环时,我没有想到它,我删除了检查最大,愚蠢的我的东西.继承人的工作代码

def isPalindrome(num):
    return str(num) == str(num)[::-1]
def largest(bot, top):
    z = 0
    for x in range(top, bot, -1):
        for y in range(top,bot, -1):
            if isPalindrome(x*y):
                if x*y > z:
                    z = x*y
    return z
print largest(100,999)
Run Code Online (Sandbox Code Playgroud)

吐出906609

Joh*_*ica 9

反向迭代找不到最大值x*y,它找到最大的回文x.有比580085更大的答案; 它有一个更小x但更大y.


Jon*_*nts 5

这将更有效地写为:

from itertools import product

def is_palindrome(num):
    return str(num) == str(num)[::-1]

multiples = ( (a, b) for a, b in product(xrange(100,999), repeat=2) if is_palindrome(a*b) )
print max(multiples, key=lambda (a,b): a*b)
# (913, 993)
Run Code Online (Sandbox Code Playgroud)

itertools如果您在 Python 中执行 Euler,您会发现生成器非常有用。