0

出于某种原因,第一个for...循环中的 x 变量在代码的单次迭代后从int变为。str我很困惑为什么一定会这样,但是每次我运行这个脚本时,我的集合最终都会被包含数百个零的字符串填充。

如果有人好奇,这是解决欧拉问题 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
4

4 回答 4

7

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

于 2012-08-08T07:42:03.240 回答
3

它更改为字符串,因为为其分配了一个字符串:

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

像这样的错误是你应该避免使用一个字母变量的原因。话虽这么说,我通常_在列表推导中用作一次性变量......

于 2012-08-08T07:41:58.537 回答
3

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

于 2012-08-08T07:42:35.277 回答
-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

于 2012-08-08T08:05:23.350 回答