1.解法思路
利用python计算,首先要面对输入的问题。python不像java和c++这类编程语言,在输入变量之前会定义变量的类型,因此可以在一行输入多个整数,而python读取一行多个数字只能通过先读取成字符串,可以利用split方法进行切割将数保存至列表中。
3*3矩阵的输入在这里我想的是首先将第每行的3个数字以字符串的形式保存,然后根据空格分割存入一个列表中,最后将这3个列表放在一个列表里,构成一个3*3的矩阵。但是要注意,在这里分割保存的类型是字符类型,因此在后面进行运算的时候要注意不能直接运算,需要将字符转化整型数字,可以直接通过ord函数将字符转化为对应的ASCII码减去48。
加法的话就是按一行行计算A[i][j]+B[i][j]
乘法的话稍稍复杂一点,由于在计算[1][1]的时候需要A行不变,每一列与B的行相加,B的列不变,利用三层循环,计算A[i][k]+B[k][j]
2.完整代码
def add(A,B):
C=[]
for i in range(0,3):
temp=[]
for j in range(0,3):
temp.append(ord(A[i][j])+ord(B[i][j])-96)
C.append(temp)
return C
def mul(A,B):
D=[]
for i in range(0,3):
temp=[]
for j in range(0,3):
result=0
for k in range(0,3):
result+=(ord(A[i][k])-48)*(ord(B[k][j])-48)
temp.append(result)
D.append(temp)
return D
if __name__=="__main__":
print("请输入矩阵A")
A=[]
for i in range(0,3):
temp=[]
s=input()
temp=s.split(' ')
A.append(temp)
print("请输入矩阵B")
B=[]
for i in range(0,3):
temp=[]
s=input()
temp=s.split(' ')
B.append(temp)
print(add(A,B))
print(mul(A,B))
3.输出结果
4.优化
上述只考虑到十以内的数字进行计算,如果超出了个位数的数字则无法计算。只需要修改字符串转数字的思路即可。
上述的转化思路是将单个数字字符转化为数字,通过ord函数将单个字符转化成对应的ASCII码减去0对应的ASCII码。其实int、long函数能直接将一个字符串转化为数字,根据数据的范围可以自行选择用哪个,数据小用int,数据大用long。
把ord(A[i][j])+ord(B[i][j])-96 修改成 int(A[i][j])+int(B[i][j])
把(ord(A[i][k])-48)*(ord(B[k][j])-48) 修改成 int(A[i][j])*int(B[i][j])
修改后的代码:
def add(A,B):
C=[]
for i in range(0,3):
temp=[]
for j in range(0,3):
temp.append(int(A[i][j])+int(B[i][j]))
C.append(temp)
return C
def mul(A,B):
D=[]
for i in range(0,3):
temp=[]
for j in range(0,3):
result=0
for k in range(0,3):
result+=(int(A[i][k]))*(int(B[k][j]))
temp.append(result)
D.append(temp)
return D
if __name__=="__main__":
print("请输入矩阵A")
A=[]
for i in range(0,3):
temp=[]
s=input()
temp=s.split(' ')
A.append(temp)
print("请输入矩阵B")
B=[]
for i in range(0,3):
temp=[]
s=input()
temp=s.split(' ')
B.append(temp)
print(add(A,B))
print(mul(A,B))
运行结果:
请输入矩阵A 111 1 22 34 32 33 111 24 4 请输入矩阵B 112 23 2 3 5 6 43 3 4 [[223, 24, 24], [37, 37, 39], [154, 27, 8]] [[13381, 2624, 316], [5323, 1041, 392], [12676, 2685, 382]]