列表索引超出范围矩阵计算器

时间:2020-06-20 00:27:27

标签: python indexoutofboundsexception

我正在上Hyperskill python开发人员课程。我必须仅使用python基础而不使用numpy,pandas等制作一个矩阵计算程序。 我不知道我的代码有什么问题。我收到此错误:

exception in test #9

Traceback (most recent call last):
  File "processor.py", line 89, in <module>
    a += main[i][k] * main2[k][j]
IndexError: list index out of range

这就是我所拥有的,认为还可以:

main = []
main2 = []
final = [[]]
mat = []

while True:
    print("""1. Add matrices
2. Multiply matrix by a constant
3. Multiply matrices
0. Exit""")
    print("Your choice:")
    choice = int(input())
    if choice == 1:
        print("Enter size of first matrix:")
        rows, columns = input().split()
        rows, columns = int(rows), int(columns)
        print("Enter first matrix:")
        for i in range(rows):
            mat = input().split()
            mat = list(map(float, mat))
            main.append(mat)
        print("Enter size of second matrix:")
        rows2, columns2 = input().split()
        rows2, columns2 = int(rows2), int(columns2)
        print("Enter second matrix:")
        for i in range(rows2):
            mat = input().split()
            mat = list(map(float, mat))
            main2.append(mat)
        print("The result is:")
        if rows == rows2 and columns == columns2:
            for i in range(rows):
                for j in range(columns):
                    a = str(main[i][j] + main2[i][j])
                    final.insert(i, a)
                    print(final[i], end=' ')
                print()
        else:
            print('ERROR')
        print()
        continue
    if choice == 2:
        print("Enter size of first matrix:")
        rows, columns = input().split()
        rows = int(rows)
        columns = int(columns)
        print("Enter matrix:")
        for i in range(rows):
            mat = input().split()
            mat = list(map(float, mat))
            main.append(mat)
        print("Enter constant:")
        constant = int(input())
        print("The result is:")
        if rows == rows and columns == columns:
            for i in range(rows):
                for j in range(columns):
                    a = str(constant * main[i][j])
                    final.insert(i, a)
                    print(final[i], end=' ')
                print()
        else:
            print('ERROR')
        print()
        continue
    if choice == 3:
        print("Enter size of first matrix:")
        rows, columns = input().split()
        rows, columns = int(rows), int(columns)
        print("Enter first matrix:")
        for i in range(rows):
            mat = input().split()
            mat = list(map(float, mat))
            main.append(mat)
        print("Enter size of second matrix:")
        rows2, columns2 = input().split()
        rows2, columns2 = int(rows2), int(columns2)
        print("Enter second matrix:")
        for i in range(rows2):
            mat = input().split()
            mat = list(map(float, mat))
            main2.append(mat)
        print("The result is:")
        if columns == rows2:
            for i in range(rows):
                for j in range(columns2):
                    a = 0
                    for k in range(rows2):
                        a += main[i][k] * main2[k][j]
                    final.insert(i, str(a))
                    print(final[i], end=' ')
                print()
        print()
        continue
    if choice == 0:
        break

感谢您的帮助! 附言 “看起来您的帖子主要是代码;请添加更多详细信息。”我认为我已经为这个问题提供了足够的细节。

1 个答案:

答案 0 :(得分:1)

所以我尝试了这个:

  • 选项:3
  • 第一个矩阵:大小为1x1,值[1]
  • 第二个矩阵:大小为1x1,值[1]

它有效,然后我尝试了while循环的第二次迭代:

  • 选项:3
  • 第一个矩阵:大小为2x2,值[[2,2],[2,2]]
  • 第二个矩阵:大小为2x2,值[[2,2],[2,2]]

我得到了您列出的错误。

我注意到您一直在追加到main和main2,但是您从未重置它们。因此,当它到达for循环时,它将访问我使用的先前矩阵的值(在我的情况下为[1.0]),这将在第二次while循环迭代中引发IndexError,因为它期望一个长度为2的列表([2.0 ,2.0]),但得到了长度为1([1.0])的列表。

为了解决这个问题,我会添加

main = []
main2 = []
final = [[]]
mat = []

在while循环内部,每次运行while循环时将其重置。