当我遇到问题时,我在Project Euler上尝试了问题4。这是我的代码。
def Problem4():
x = 100
y = 909
a = []
b = []
x1 = []
y1 = []
while y < 1000:
while x < 1000:
z = x*y
if str(z) == str(z)[::-1]:
a.append(z)
x1.append(x)
y1.append(y)
else:
b.append(z)
x = x + 1
y = y + 1
print(a)
print(x1)
print(y1)
Problem4()
此代码运行正常,但即使在y = y + 1
之后,y的值仍保持不变。它为什么这样做?有没有更好的方法来做到这一点。
答案 0 :(得分:1)
我得到了解决方案。 y
未增加的原因是因为x
的值未从1000
重置。它只是自动跳过那段代码,因为x
的值已经是1000.这是我改进的代码,它也按顺序对数组进行排序。
def Problem4():
y = 100
a = []
x1 = []
y1 = []
while y < 1000:
y = y + 1
x = 100
while x < 1000:
z = x*y
if str(z) == str(z)[::-1]:
a.append(z)
x = x + 1
a.sort()
print(a)
Problem4()
答案 1 :(得分:1)
将x = 100
行移动到第一个while循环和第二个while循环之间的位置,以解决您的问题。
def Problem4():
y = 909
a = []
b = []
x1 = []
y1 = []
while y < 1000:
x = 100
while x < 1000:
z = x*y
if str(z) == str(z)[::-1]:
a.append(z)
x1.append(x)
y1.append(y)
else:
b.append(z)
x = x + 1
y = y + 1
print(a)
print(x1)
print(y1)
Problem4()
答案 2 :(得分:1)
至于“更好”,你可能想要使用xrange():
a = []
for y in xrange(909, 1000):
for x in xrange(100, 1000):
x = x * y
if str(z) = str(z)[::-1]:
a.append(z)
a.sort()
print a