for循环在更改起始范围值时更改长度

时间:2019-05-03 21:09:03

标签: python python-3.x

我试图做项目欧拉问题nr.4;

首先,我的代码无缘无故地以999、91停止;

但这不是该问题的核心,如果您能找到该问题ID的解决方案,也希望听听您的回答!

但是,我现在的问题是,我希望for循环稍后开始,因为我不想等待所有迭代直到999:

我的代码如下:

    num=0
    rev=0
for a in range(1000):
    for b in range(1000):
        num=a*b
        rev=int(str(num)[::-1])
        if num==rev and num!=0 and rev!=0:
            print(a,b,num,rev)

工作正常,但是有两个问题:

第一;当我将range(1000)更改为range(100,1000)时,它无缘无故地停在995而不是999。

秒:它没有得到906609的真实答案: 因为它停在999、91,直到1001才找到另一个回文数。

是的,我希望你能帮助我ty:)

2 个答案:

答案 0 :(得分:1)

您的代码不会止于发现的最大值,而只是发现的最后一个值。 a击中991后,为了满足回文数,最后一个值b可能是91。 如果您想获得最大的价值,就需要对产生的最大值进行计数,如下所示:

max_a, max_b, max_num = 0, 0, 0
for a in range(1000):
    for b in range(1000):
        num=a*b
        rev=int(str(num)[::-1])
        if num==rev and num!=0 and rev!=0:
            if num > max_num:
                max_a, max_b, max_num = a, b, num

print(max_a, max_b, max_num) # 913 993 906609

答案 1 :(得分:0)

num=0
rev=0
max_num=0
for a in range(100, 1000):
    for b in range(100, 1000):
        num=a*b
        rev=int(str(num)[::-1])
        if num==rev and num!=0 and rev!=0:

            if num>max_num:
                max_num=num
            print(a,b,num,rev, max_num)

为我做了!我刚刚因@Chr​​ispresso修复了大脑故障!比他的建议还简单!我只需要添加一个max_num变量!谢谢大家的宝贵时间!