2015-05-12 41 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