调试索引器错误:琐碎的和生成问题

2024-10-01 02:26:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我不知道是什么导致了索引错误,不完全是在寻找一个快速修复方法。但是,如果我的代码让你反感/非常无效,请告诉我。目标是生成由两个四位数的乘积产生的回文。在

代码:

for x in range(10000):
    for y in range(10000):
        product = str(x*y)
        lengthprod = len(str(product))
        for digit in range(lengthprod+1):
            if (product[digit]==product[lengthprod-digit]):
                print x,"x",y,"=",product

回溯:

^{pr2}$

Tags: 方法代码in目标forlenif错误
3条回答

两个变化:

1:范围(0,lengthprod+1)应为range(0,lengthprod)

参见有关range()的文档

2:产品[lengthprod digit]应为产品[lengthprod-digit-1]

关闭一个错误,因为lengthprod是长度(基于1),而数字是索引(基于0)。在

注意,这只会给你有效的“个位数”回文,但会让你越过索引超出范围的错误。在

迭代0…lengthprod值,但产品的合法下标是0…lengthprod-1。在

最后一个索引越界。它引用的元素超出字符串末尾一个字节。在

将一个数字转换成字符串通常是一个缓慢的操作,因为通常有许多可能性(整数、浮点、科学记数法,可能是一些异乎寻常的东西,比如分数或虚数,更不用说处理前导零或过大数或舍入到两个小数位)。因此,在检查正整数是否为回文时,通过反复取输入模10来提取最后一个数字,将该数字加到每一步乘以10的累加器中,然后在循环之前将输入数字除以10,这通常是一种更好的方法。我不会说Python,所以下面是我的一个反转数字的方案程序:

(define (rev n)
  (let loop ((n n) (r 0))
    (if (zero? n) r
      (loop (quotient n 10)
            (+ (* r 10) (modulo n 10))))))

然后你可以通过检查输入的数字是否等于它的倒数来检查这个数字是否是回文。在

编辑:这里是Python语言:

^{pr2}$

相关问题 更多 >