您的位置:首页 > 编程语言 > Python开发

我的第一篇CSDN博客文章,Python代码实现矩阵翻转

2016-06-17 01:21 796 查看

Python代码实现矩阵翻转

(^__^)不知道这个标题该取个什么名字好

嗯,有点儿词穷啊,不知道怎么表达。这一篇文章,是我在CSDN的第一篇博客。最近自己一直在自学编程,希望通过写博客的方式来记录自己的学习历程。我自己是一名园艺专业的大学生,对自己本专业不太感兴趣,但限于能力所限,不能转专业到自己喜爱的计算机类专业,所以为了满足自己的兴趣,就选择了自学这条路子。嗯,当然啦,我也不愿意去丢下我所在的专业,未来想往农业现代化方面发展!

嗯,第一次用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、没有异常处理,输入的行列数目不对应会报错

END

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 编程