Python 3.x 调用函数multi()时,如何使代码循环回到开头? 回文数字的两种读取方式相同。由两个两位数的乘积构成的最大回文是9009=91×99。 查找由两个3位数字的乘积构成的最大回文。

Python 3.x 调用函数multi()时,如何使代码循环回到开头? 回文数字的两种读取方式相同。由两个两位数的乘积构成的最大回文是9009=91×99。 查找由两个3位数字的乘积构成的最大回文。,python-3.x,palindrome,Python 3.x,Palindrome,这是我到目前为止为euler#4项目编写的代码。调用函数multi()后,我很难让它返回到开头。我对这整件事还是个新手,所以如果有什么不对劲,就别理我。代码似乎有效,只是没有达到预期效果。这是输出的最后几行: 999*102=102897。999 * 101 = 101898. 999 * 100 = 100899. 999 * 99 = 99900998 * 998 = 997002. 完成了 提前通知 像这样的事情可能会有所帮助:(正如@Carcigenicate所建议的那样) n=0 #这

这是我到目前为止为euler#4项目编写的代码。调用函数multi()后,我很难让它返回到开头。我对这整件事还是个新手,所以如果有什么不对劲,就别理我。代码似乎有效,只是没有达到预期效果。这是输出的最后几行:

999*102=102897。999 * 101 = 101898. 999 * 100 = 100899. 999 * 99 = 99900998 * 998 = 997002. 完成了


提前通知

像这样的事情可能会有所帮助:(正如@Carcigenicate所建议的那样)

n=0
#这是三位数的
对于范围(999、900、-1)内的a:
对于范围(a,900,-1)内的b:
x=a*b
如果x>n:
sab=str(a*b)
如果sab==sab[:-1]:
n=a*b
#打印(n)
打印(n)#906609==993*913

多重
中的
for
循环吗?或者
多行
只是这4行吗?不过我会选择不同的设计。嵌套的for循环更有意义<代码>对于范围内的a(1001000):对于范围内的c(1001000):n=a*c
(但拆分为多行)。for循环不在函数multi()内,两者都具有0缩进。这是一个聪明的方法,我可能现在就试试看,看看会怎么样,哈哈。这个问题让我抓狂,所以,要检查字符串是否是回文,使用另一个循环更有意义。类似于
str\u n=str(n);对于范围内的i(len(str_n)):如果str_n[i]!=str_n[0-i]:(不是回文)
。或者,非常惯用但更复杂的
all(f==l代表f,l在zip中(str_n,reversed(str_n))
我知道[:-1]的意思,但以前从未见过像[:-1]那样使用它。我得查一下这个,哈哈。无论如何,您提供的使用嵌套for循环的答案是genius,它工作得非常好。这个程序花了大约2分钟运行了这么多的数字,但之后马上打印出了正确的答案,谢谢!我不能在这里发布新代码,因为它超过了最大字符数,但很高兴看到它正常工作。@fmagesty[:-1]反转顺序(切片中的第三个元素是步长,负步长是向后的)。但请注意,如果可能,应避免使用[:-1]。它创建列表的完整副本,这需要对列表进行迭代,然后
==
可能需要进行另一次完整迭代。对于对性能不敏感的代码来说,这很好,但它相对来说比较昂贵。@fmagesty-只要试着运行这个小程序100次,总时间是0.7秒。不知道为什么你的是2分钟?你还在试着寻找“最大回文数”或是后来的变化吗?请澄清
a = 999
c = 999

def multi():
    global a
    a = a - 1
    global c
    c = 999

for i in range(99, 1000):
    n = a * c
    c -= 1
    print('%s * %s = %s.' % (a, c, n))
    if str(n)[0] == str(n)[-1] and str(n)[1] == str(n)[-2] and str(n)[2] == str(n)[-3]:
        print('%s * %s = %s, which is a palindrome!' % (a, c, n))
    if c == 99:
        multi()
print('Done.')