Python-计算回文数时长暂停

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

我试图用我的代码找到两个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 > 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秒,非常感谢。