我的Python 3导致编译错误,但我认为没有错误

时间:2015-08-12 01:09:49

标签: python python-3.x

我想解决6174问题。

所以我制作了如下代码。

http://cfile9.uf.tistory.com/image/254FDD4955CA9C85082FE2

但输入1112时会导致错误。

http://cfile8.uf.tistory.com/image/2448F44955CA9C860DD8A1

我不明白为什么会导致错误。我认为这是正确的代码。

是不是只是python 3 bug?

P.S。 - 因为我无法发布图片,所以我会留下图片'链接。

1 个答案:

答案 0 :(得分:0)

如果我不得不猜测,那是因为在减法程序中获得的一些数字少于4个字符。例如,1001 - 1001 = 0. 0的字符串表示仅为"0",因此调用a[1]a[2]a[3]将会消失边界。

编辑:具体来说,2111 - 1112 = 999.作为一个字符串,这是“999”,只有三个字符。因此调用a[3]会导致越界错误。如果您想解决此问题,可以执行以下操作。

a = input()

for i in range(0,1000):
    digits = len(a)           ##You need to mind how many digits a has
    n = [0, 0, 0, 0]          ##Initialize all the digits of n to 0
    for j in range(0, digits):
        n[j+4-digits] = a[j]  ##Fill up n with an offset if a has fewer than 4 digit
    a = n[0]*1000 + n[1]*100 +n[2]*10 + n[3]
    b = n[3]*1000 + n[2]*100 +n[1]*10 + n[0]
    if b - a == 6174:
        break
    a = str(b-a)

print (i+1)

检查一下这是否有效。如果a = "999"n将是[0,9,9,9],则应如此。您当前编写的代码将设置n = [9,9,9],这会在您调用n[3]时导致索引错误。

相应地更改代码后,程序产生正确的输出(我推测)。对于a = "1112",迭代中a值的序列为999 8991 8082 8532,打印的最终值为{{1} }。

希望有所帮助!