2015-05-12 34 views
-2
def reverseInteger(x): 
    x_string = str(x)       
    x_list = list(x_string)      
    x_reversedlist = reversed(x_list)   
    x_reversedstring = "".join(x_reversedlist) 
    x_reversed = int(x_reversedstring)   
    return x_reversed 

def paliproduct(i1, i2): 
    while i1 < 1000 and i2 < 1000: 
      product = i1 * i2 
      i1 += 1 
      i2 += 1 
      if product == reverseInteger(product): 
       return product 

print(paliproduct(100, 100)) 

我使用Python(這是顯而易見的)...我的問題是,爲什麼外殼沒有嘗試爲i1的至i2所有可能的值(100定位最大的三位數產品 - 這也是一個plaindrome

if product == reverseInteger(product): 
    return product 

如果你想找到:-999),並進行一個輪100和100 ......

+1

'return'將返回_one_值,然後完全停止運行該函數。哦,啊! – 101

+0

,因爲你有'return'。所以當你找到第一個匹配時,你基本上退出了paliproduct方法 – Ayman

+0

正如人們所提到的那樣,它是'while'循環中的'return'。 (請注意,由於轉換回整數,您的'reverseInteger'函數無法像預期的那樣以0結尾。) –

回答

2

其儘快返回,因爲它找到一個迴文,因爲你告訴它使用return爆發後所有你需要修改paliproduct函數的迴文:

def paliproduct(i1, i2): 
    palindromes = [] 
    while i1 < 1000 and i2 < 1000: 
      product = i1 * i2 
      i1 += 1 
      i2 += 1 
      if product == reverseInteger(product): 
       palindromes.append(product) 
    return palindromes 

我所做的創建palindromes列表。每次product是一個迴文,我將它追加到列表中(這是您的return聲明的地方)。在循環結束時,我返回列表。

+0

哦,我明白你的意思了......非常感謝! – SydneySniper

+0

但是當我運行代碼時,它並沒有給我正確的答案......它應該給出一個列表,其中** 906609 **是最大的,但是它給出了一個列表([10201,12321,14641,40804, 44944,69696,94249,698896]其中** 698896 **是最大的 – SydneySniper

+1

@GlennMcGrath發生這種情況是因爲您的「paliproduct」功能只能通過精確的正方形,而「906609」不是精確的正方形 – Alik