Python-计算回文数时长暂停
我试图用我的代码找到两个3位数的乘积所形成的最大回文数。它适用于2位和3位数字,但当我尝试使用4位数字时,它不再有效。结尾没有输出或“进程已完成,退出代码为0”。它就像在一个无限循环中一样停了下来Python-计算回文数时长暂停,python,for-loop,if-statement,palindrome,halting-problem,Python,For Loop,If Statement,Palindrome,Halting Problem,我试图用我的代码找到两个3位数的乘积所形成的最大回文数。它适用于2位和3位数字,但当我尝试使用4位数字时,它不再有效。结尾没有输出或“进程已完成,退出代码为0”。它就像在一个无限循环中一样停了下来 palin = 0 for x in range(1, 10000): for y in range(1, 10000): mult = x * y if str(mult) == str(mult)[::-1]: if mult &g
palin = 0
for x in range(1, 10000):
for y in range(1, 10000):
mult = x * y
if str(mult) == str(mult)[::-1]:
if mult > palin:
palin = mult
print(palin)
我哪里出错了?我大约一个月前才开始使用Python,所以我的代码仍然不太有效它有点像一个无限循环,你知道,它很长 但实际上不知怎么的(也许我的电脑很快:-)代码只运行了15秒左右 所以很好
它没有停顿,只是很慢。它有点像一个无限循环,你知道,它很长 但实际上不知怎么的(也许我的电脑很快:-)代码只运行了15秒左右 所以很好
没有停顿,只是速度慢。您的算法不正确。第二个
if
应与mult=x*y
处于同一级别
我稍微修改了你的代码。通过下面的代码,您可以看到算法不会停止。只是速度太慢了。你得等几分钟
pa = 0
for x in range(1, 10000):
if x % 100 == 0:
print(x)
for y in range(x, 10000):
m = x*y
if str(m) == str(m)[::-1]:
if m > pa:
pa = m
print(pa)
我将第二个范围(1,10000)
更改为范围(x,10000)
以将重复的1*2和2*1消除为单个1*2
如果你想加速,考虑切换到C或C++。 此外,您还可以反转迭代顺序以获得极大的加速
for x in range(10000, 0, -1):
for y in range(10000, 0, -1):
m = x*y
if str(m) == str(m)[::-1]:
print(m)
exit(0)
你的算法不正确。第二个
if
应与mult=x*y
处于同一级别
我稍微修改了你的代码。通过下面的代码,您可以看到算法不会停止。只是速度太慢了。你得等几分钟
pa = 0
for x in range(1, 10000):
if x % 100 == 0:
print(x)
for y in range(x, 10000):
m = x*y
if str(m) == str(m)[::-1]:
if m > pa:
pa = m
print(pa)
我将第二个范围(1,10000)
更改为范围(x,10000)
以将重复的1*2和2*1消除为单个1*2
如果你想加速,考虑切换到C或C++。 此外,您还可以反转迭代顺序以获得极大的加速
for x in range(10000, 0, -1):
for y in range(10000, 0, -1):
m = x*y
if str(m) == str(m)[::-1]:
print(m)
exit(0)
这有点像一个无限循环,你知道,它很长…你的算法不会停止。它很慢(而且是错的)。因此,在获得任何输出之前,您必须等待几分钟。这是PrjectEuleur网站上名为
最大回文产品的第四个问题。你的算法不正确,它不是一个无限循环。但完成计算可能需要很长时间。更好的方法是优化代码。也许用一些数学…它有点像一个无限循环,你知道,它很长…你的算法不会停止。它很慢(而且是错的)。因此,在获得任何输出之前,您必须等待几分钟。这是PrjectEuleur网站上名为最大回文产品的第四个问题。你的算法不正确,它不是一个无限循环。但完成计算可能需要很长时间。更好的方法是优化代码。也许有一些数学…这个代码不包括所有的情况下,OP想考虑。您只需编写测试代码,如1*1、2*2、3*3。。。。OP想要测试1*1,1*2,1*3。。。2*1, 2*2, 2*3.... 10000*1, 10000*2 ... 10000*10000. 使用zip,您只测试了所有情况的0.01%。@Hoblovski完成!此代码不包括OP想要考虑的所有情况。您只需编写测试代码,如1*1、2*2、3*3。。。。OP想要测试1*1,1*2,1*3。。。2*1, 2*2, 2*3.... 10000*1, 10000*2 ... 10000*10000. 使用zip,您只测试了所有情况的0.01%。@Hoblovski完成!对不起,我的错…它实际上与mult=x*y的级别相同。我把它弄错了,我对它进行了编辑你用这个代码把时间缩短了一半,用我以前的代码大约花了115秒,但用你的代码,只花了61秒,非常感谢。对不起,我的错…它实际上与mult=x*y的级别相同。我把它弄错了,我编辑了它你用这个代码把时间缩短了一半,用我以前的代码大约花了115秒,但用你的代码,只花了61秒,非常感谢。