我的第一篇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动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例
- 肯特·贝克:改变人生的代码整理魔法