此代码旨在查找由两个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())
答案 0 :(得分:2)
您的代码正在执行您告诉它的操作。
与您的假设相反,列表中有很多大于99,999的数字。
我已经执行了您的代码,列表中的第一个结果是:101101
这显然是> 99999
。
但还有其他更大的内容,例如561165
和888888
,它们也在您的列表中。
该列表总共包含650
个回文。这是您可以使用开始条件生成的唯一
您无法达到999,999 ,因为无法在您的for
循环中覆盖...
Python就像你说的那样。
编辑:就像奥斯卡的答案所说的那样,你应该将你的限制设定为1001
,然后回到你身边999,999
。
答案 1 :(得分:1)
那是因为这部分不正确:
palindrome_list.append(product)
您正在排序字符串,而不是数字 - 即使所有结果都出现在列表中,它们也被排序为字符串,并且出现的顺序与您预期的顺序不同。在上面显示的两个地方更改上面的代码,它应该如下所示:
palindrome_list.append(int(product))
现在很容易看出由两个3位数字(列表中的最后一个)产生的最大回文是什么:
palindromes()[-1]
=> 906609