我正在上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
感谢您的帮助! 附言 “看起来您的帖子主要是代码;请添加更多详细信息。”我认为我已经为这个问题提供了足够的细节。
答案 0 :(得分:1)
所以我尝试了这个:
它有效,然后我尝试了while循环的第二次迭代:
我得到了您列出的错误。
我注意到您一直在追加到main和main2,但是您从未重置它们。因此,当它到达for循环时,它将访问我使用的先前矩阵的值(在我的情况下为[1.0]),这将在第二次while循环迭代中引发IndexError,因为它期望一个长度为2的列表([2.0 ,2.0]),但得到了长度为1([1.0])的列表。
为了解决这个问题,我会添加
main = []
main2 = []
final = [[]]
mat = []
在while循环内部,每次运行while循环时将其重置。