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
这将更有效地写为:
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,您会发现生成器非常有用。