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

2024-09-21 20:08:58 发布

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

我正在学习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

谢谢你的帮助! 附笔。 “看起来你的帖子大部分是代码,请添加更多细节。”我想我已经为这个问题提供了足够的细节


Tags: columnsinforinputmainrangematrixrows
1条回答
网友
1楼 · 发布于 2024-09-21 20:08:58

所以我试了一下:

  • 选择:3
  • 第一个矩阵:大小1x1和值[1]
  • 第二个矩阵:大小1x1和值[1]

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

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

我得到了你列出的错误

我注意到您一直在向main和main2追加内容,但从未重置它们。因此,当它到达for循环时,它将访问我以前使用的矩阵的值(在我的例子中是[1.0]),这将在第二次while循环迭代中提高索引器,因为它期望一个长度为2([2.0,2.0])的列表,但得到一个长度为1([1.0])的列表

为了解决这个问题,我想补充一点

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

在while循环中,每次运行while循环时都将其重置

相关问题 更多 >