2013-04-04 43 views
2

此代码旨在查找由两个3位数字的乘积创建的最大回文。为什么由代码创建的列表不包含大于99,999(Python)的值

我敢肯定,有更有效的方式来解决这个问题,欢迎您发表他们,但在这个阶段我的学习,我最感兴趣的是我怎么能编辑的代码,我已经写出来使其正确工作。

当我运行此代码时,它正确地创建了一个排序的回文列表,但列表中最大的数字是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

Dupe? http://stackoverflow.com/questions/7460545/palindrome-from-the-product-of-two-3-digit-numbers?rq=1 – BenDundee 2013-04-04 22:37:18

+0

不是真的,运不明白为什么这个列表是有限100.000元件 – 2013-04-04 22:38:43

+0

这很有帮助,但如果可能的话,我想要对我的特定代码提供反馈。仍然赢得该语言,我想看看我的代码出错了。这不是一个好的地方吗? – 2013-04-04 22:39:46

回答

1

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

palindrome_list.append(product) 

你被字符串进行排序,而不是数字 - 尽管所有的结果列表中出现,他们被归类为字符串,并出现在与您预期的顺序不同。改变在它出现在两个地方上面的代码,它应该是这样的:

palindrome_list.append(int(product)) 

现在很容易,看看有什么用两个3位数字的产品(最后一个在列表中创建的最大回文):

palindromes()[-1] 
=> 906609 
+0

我认为OP写了99,999,少了10倍。不过,我认为你正处于良好的轨道上。 – 2013-04-04 22:44:22

+0

是的,它应该包含所有回文数达998,001。正如Stephane所说,它只能扩展到99,999。 – 2013-04-04 22:45:36

+0

哇!那就是诀窍。现在你已经指出了它的意义。很简单!非常感谢:) – 2013-04-04 23:26:26

1

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

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

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

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

总共列表中包含650 palindromes。这是唯一的,你可以用你的启动条件

产生你不能达到999,999,因为它不能在你的for循环来达到...

的Python只是做你告诉它。

编辑:像奥斯卡的回答说,你应该把你的极限1001,然后回文999,999会来找你。

+0

我误会了,OP感兴趣的是“由两个3位数字产生的最大回文数”,恰好是906609.OP的解决方案一直都是对的,列表完成,只是数值被排序为字符串,因此最后一个不是OP的预期。 – 2013-04-04 23:24:20

+0

我也错了。然而,最大的仍然是999999 :-) – 2013-04-04 23:40:04

+0

不,两个3位数字的最大可能产品是999 * 999或998001.使用我修改后的代码,我发现由两个3位数字的乘积创建的最大PALINDROME是906,609。这最终是正确的答案:) – 2013-04-04 23:49:48

相关问题