2012-08-08 61 views
0

由于某种原因,第一个循环中的x变量从代码int变为str。我很困惑,为什么必须这样做,但每次运行这个脚本时,我的设置最终都会被包含数百个零的字符串填充。xrange生成字符串?我不明白

如果有人想了解,这是解决欧拉的问题4.

# A palindromic number reads the same both ways. 
# The largest palindrome made from the product 
# of two 2-digit numbers is 9009 = 91 99. 
# Find the largest palindrome made from the product of two 3-digit numbers. 

def palindrome(): 

    products = set() 

    for x in xrange(700,999): 
     for y in xrange(700,999): 
      temp = x*y 
      n = [x for x in str(temp)] 
      if temp not in products: 
       if len(n)%2 == 0: 
        half = len(n)/2 
        first = n[:half] 
        last = n[half:] 
        last.reverse() 
        if first == last: 
         products.add(temp) 

    return products 



if __name__ == "__main__": 
    n = palindrome() 
    print n 
+1

听起来像功课。 – 2012-08-08 07:53:08

+0

@InbarRose:OP说他在做[欧拉项目的问题#4](http://projecteuler.net/problem=4) – Kimvais 2012-08-08 08:09:36

回答

3

因为 assing一个字符串,它会变成一个字符串的尝试:

 n = [x for x in str(temp)] 

误区像这些是你应该避免使用一个字母变量的原因。也就是说,我通常使用_作为列表解析中的一次性变量...

7

在python 2.x中,列表解析会将其变量泄漏到封闭范围中。所以你的列表理解[x for x in str(temp)]会覆盖x的值。但请注意,它将在外循环的下一次迭代中返回到int。

3

不要在以下列表中使用x理解n = [x for x in str(temp)]。只需选择另一个变量名称即可。

-1
1 for x in xrange(700,999): 
2  for y in xrange(700,999): 
3   temp = x*y 
4   n = [x for x in str(temp)] 

后步骤#4中,n = [ '4', '9', '0', '0', '0', '0']中,x = '0'

然后对于下一步#3,temp ='0'* 701