利用python自己编写函数计算由用户输入的两个3*3矩阵的加法和乘法 | 您所在的位置:网站首页 › python3**2**3的值 › 利用python自己编写函数计算由用户输入的两个3*3矩阵的加法和乘法 |
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.输出结果上述只考虑到十以内的数字进行计算,如果超出了个位数的数字则无法计算。只需要修改字符串转数字的思路即可。 上述的转化思路是将单个数字字符转化为数字,通过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]] |
CopyRight 2018-2019 实验室设备网 版权所有 |