出于某种原因,在单次迭代代码之后,第一个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
答案 0 :(得分:7)
在python 2.x中,list comprehensions将其变量泄漏到封闭范围。因此,列表推导[x for x in str(temp)]
会覆盖x的值。但请注意,它将在外循环的下一次迭代中重新设置为int。
答案 1 :(得分:3)
它变为字符串,因为你为它指定一个字符串:
n = [x for x in str(temp)]
这些错误是你应该避免使用一个字母变量的原因。话虽这么说,我通常使用_
作为列表推导中的一次性变量......
答案 2 :(得分:3)
请勿在以下列表理解n = [x for x in str(temp)]
中使用x。只需选择另一个变量名称。
答案 3 :(得分:-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