Python代码实现矩阵翻转
(^__^)不知道这个标题该取个什么名字好
嗯,有点儿词穷啊,不知道怎么表达。这一篇文章,是我在优快云的第一篇博客。最近自己一直在自学编程,希望通过写博客的方式来记录自己的学习历程。我自己是一名园艺专业的大学生,对自己本专业不太感兴趣,但限于能力所限,不能转专业到自己喜爱的计算机类专业,所以为了满足自己的兴趣,就选择了自学这条路子。嗯,当然啦,我也不愿意去丢下我所在的专业,未来想往农业现代化方面发展!
嗯,第一次用markdown写博客啊!以后都这么干了,好了,进入主题吧!
Python代码实现矩阵翻转
之前在计蒜客的挑战难题上看到这么一道题目
感觉难度不大,于是我就选择试一下,使用自己最近学的Python语言。通了两晚的宵,总算把实现思路搞清楚,最后完成了代码的实现,不赘述太多了,开始吧
实现的几个步骤
-读入行列和转动方向
-创建对应行列的二维数组(矩阵)
-输入矩阵各元素
-进行行列变换
-打印输出矩阵
读入行列和转动方向
根据题目的要求,我们需要分别读入行数、列数和翻转方向(0代表上下,1代表左右),每个数之间使用空格分隔,例如“1 2 1”代表对一个1行2列的矩阵进行左右翻转。根据要求,需要创建三个变量来分别存储行、列、方向。为了从字符串提取出三个数字,这里我选择使用字符串的split()
方法,方法返回一个含有三个字符类型的数字的列表,最后通过int()进行类型转换分别交由三个变量管理,具体实现代码如下:
#读入行列和转动方向
linStr = input("")
linNum = linStr.split(" ")
lines = int(linNum[0])
lists = int(linNum[1])
diration = int(linNum[2])
创建对应行列的二维数组(矩阵)
根据题目要求,我们需要创建一个二维数组,from my perspective,严格来说,python不存在二维数组,所以我们需要换一种方式来代表二维数组,这就是列表里面再放进列表,通过上述方法,来实现输出一个二维数组,实现代码如下:
#创建对应行列的二维数组(矩阵)
mateix = [[0 for i in range(lists)]for i in range(lines)]
输入矩阵各元素
在这段功能的实现上纠结了我许久,其中一个纠结的地方就是存入字符串型的数字,还是整数类型的数字呢,最后为了代码的简洁,我决定存入字符串型。
题目要求输入一个看起来像矩阵的xx(词穷请原谅)
存入思路如下:
通过lines行的读取,分别读入第i行的数据,所以先来一个for循环,在循环体内部,读取第i行的内容,然后使用split()方法分离数据,然后在使用一个for循环一个一个的存入!实现代码如下:
#输入矩阵各元素
for i in range(lines):
linStr = input("")
linNum = linStr.split(" ")
for k in range(lists):
mateix[i][k] = linNum[k]
进行行列变换
现在来到了程序最核心的部分了,完成了相关的输入之后,就要开始进行转换。
首先考虑上下翻转。根据每行相互交换的关系进行调换。列变换同理,实现代码如下:
# 进行行列变换
if diration == 0: #行变换
for i in range(int(lines/2)):
mateix[lines-i-1],mateix[i] = mateix[i],mateix[lines-i-1]
elif diration == 1: #列变换
for i in range(lines):
for j in range(int(lists/2)):
mateix[i][lists-j-1],mateix[i][j] = mateix[i][j],mateix[i][lists-j-1]
else:
print("error")
打印输出矩阵
最后打印输出矩阵,使用两个for each对二维数组进行遍历,实现代码如下:
#打印输出矩阵
for i in mateix:
for j in i:
print(j,end=" ")
print()
测试
这样一来,代码就全部完成,下面开始测试下代码
全部代码展示
# 这是一个对矩阵进行翻转的程序
#读入行列和转动方向
linStr = input("")
linNum = linStr.split(" ")
lines = int(linNum[0])
lists = int(linNum[1])
diration = int(linNum[2])
#创建对应行列的二维数组(矩阵)
mateix = [[0 for i in range(lists)]for i in range(lines)]
#输入矩阵各元素
for i in range(lines):
linStr = input("")
linNum = linStr.split(" ")
for k in range(lists):
mateix[i][k] = linNum[k]
# 进行行列变换
if diration == 0: #行变换
for i in range(int(lines/2)):
mateix[lines-i-1],mateix[i] = mateix[i],mateix[lines-i-1]
elif diration == 1: #列变换
for i in range(lines):
for j in range(int(lists/2)):
mateix[i][lists-j-1],mateix[i][j] = mateix[i][j],mateix[i][lists-j-1]
else:
print("error")
#打印输出矩阵
for i in mateix:
for j in i:
print(j,end=" ")
print()
存在的一些问题
1、没有异常处理,输入的行列数目不对应会报错