Python矩阵求和异常咨询:为何矩阵元素未执行数值相加仅做字符串拼接?
问题原因与解决方法
核心问题:字符串拼接而非数值加法
你遇到的情况本质是**input()函数返回的是字符串类型**,而非你期望的数值类型。Python里,字符串之间的+运算符作用是拼接字符串,而非数学加法——这就是为什么输入"2"和"3"后,得到的结果是"23"而不是5。
具体原因拆解
- 输入默认存为字符串:你的代码里,
matrix1和matrix2的元素直接通过input()获取,不管你输入的是数字还是字符,Python都会把它存成字符串类型。 - 遍历顺序不匹配:另外代码里求和矩阵的遍历逻辑有小问题:初始化
sum时是按row行、kol列创建的,但后续遍历却先循环kol(列)再循环row(行),这可能导致行列颠倒或者索引错误。
解决方法
只需要做两个关键修改就能解决问题:
1. 将输入转换为数值类型
在获取矩阵元素时,把input()的结果转换成整数(整数矩阵场景)或浮点数(支持小数场景),示例如下:
matrix1 = [[int(input("enter the element of matrix 1:")) for j in range(row)] for i in range(kol)] matrix2 = [[int(input("enter the element of matrix 2:")) for j in range(row)] for i in range(kol)]
如果需要处理小数,把int替换成float即可。
2. 修正求和矩阵的遍历顺序
保持初始化和遍历的行列顺序一致,比如初始化时按row行、kol列创建矩阵,遍历也先循环行再循环列:
print("sum matrix") for j in range(row): for i in range(kol): sum_matrix[j][i] = matrix1[j][i] + matrix2[j][i] print(format(sum_matrix[j][i], "<3"), end="") print()
完整修正后的代码
row = int(input("enter for row:")) kol = int(input("enter for column :")) # 转换输入为整数类型 matrix1 = [[int(input("enter the element of matrix 1:")) for j in range(row)] for i in range(kol)] matrix2 = [[int(input("enter the element of matrix 2:")) for j in range(row)] for i in range(kol)] sum_matrix = [[0 for i in range(kol)] for j in range(row)] # 避免用sum作为变量名(sum是Python内置函数) print("matrix1") for j in range(row): for i in range(kol): print(format(matrix1[j][i], "<3"), end="") print() print("matrix2") for j in range(row): for i in range(kol): print(format(matrix2[j][i], "<3"), end="") print() print("sum matrix") for j in range(row): for i in range(kol): sum_matrix[j][i] = matrix1[j][i] + matrix2[j][i] print(format(sum_matrix[j][i], "<3"), end="") print()
额外提醒:尽量不要用sum作为变量名,因为sum是Python的内置函数,用它当变量名会覆盖内置功能,所以这里改成了sum_matrix。
内容的提问来源于stack exchange,提问作者Adrian Des Zuchrufy




