2013-04-04 112 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

相關問題