Python项目实战:绕圈圈面试题
2019-07-04 11:39
218 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sadhsj/article/details/94601013
下面是来自某知名公司的一道“面试题”:给定 4,应该输出如下形式的数据:
01 12 11 10
02 13 16 09
03 14 15 08
04 05 06 07
给定 5,应该输出如下形式的数据:
01 16 15 14 13
02 17 24 23 12
03 18 25 22 11
04 19 20 21 10
05 06 07 08 09
仔细观察上面的试题,不难发现程序就是“绕圈圈”填入整数,如图 1 所示:
图 1 填数规则
掌握上面的规律之后,我们打算使用列表嵌套列表(相当于二维列表)的方式来存储这些整数,将数值存入嵌套列表时需要遵守这种“绕圈圈”的规则,然后再以二维方式将这个嵌套列表打印出来。
为了控制“绕圈”,该程序的关键点就是控制绕固的拐弯点。在图 1 中标出的对角线上的位置,就是重要的拐弯点。
找到图中 ①、②、③ 号转弯线之后,可以发现如下规则:
- 位于 ① 号转弯线的行索引与列索引总和为 n – 1(即给定整数值减 1)。
- 位于 ② 号转弯线的行索引与列索引相等。
- 位于 ③ 号转弯线的行索引等于列索引减 1。
总结出上面的规则之后,接下来就可实现如下程序:
SIZE = 7 array = [[0] * SIZE] # 创建一个长度SIZE * SIZE的二维列表 for i in range(SIZE - 1): array += [[0] * SIZE] # 该orient代表绕圈的方向 # 其中0代表向下,1代表向右,2代表向左,3代表向上 orient = 0 # 控制将1~SIZE * SIZE的数值填入二维列表中 # 其中j控制行索引,k控制列索引 j = 0 k = 0 for i in range(1, SIZE * SIZE + 1) : array[j][k] = i # 如果位于图4.2中①号转弯线上 if j + k == SIZE - 1 : # j>k,位于左下角 if j > k : orient = 1 # 位于右上角 else : orient = 2 # 如果位于图5.2中②号转弯线上 elif (k == j) and (k >= SIZE / 2) : orient = 3 # 如果j位于图5.2中③号转弯线上 elif (j == k - 1) and (k <= SIZE / 2) : orient = 0 # 根据方向来控制行索引、列索引的改变 # 如果方向为向下绕圈 if orient == 0 : j += 1 # 如果方向为向右绕圈 elif orient == 1: k += 1 # 如果方向为向左绕圈 elif orient == 2: k -= 1 # 如果方向为向上绕圈 elif orient == 3: j -= 1 # 采用遍历输出上面的二维列表 for i in range(SIZE) : for j in range(SIZE) : print('%02d ' % array[i][j], end = "") print("")
上面程序的重点就在于当处于转弯线上时绕圈的方向。一旦正确控制了绕圈的方向,接下来就可通过对 j(行索引)、k(列索引)的增减来控制绕圈了。
运行该程序,可以看到如下输出结果:
01 24 23 22 21 20 19
02 25 40 39 38 37 18
03 26 41 48 47 36 17
04 27 42 49 46 35 16
05 28 43 44 45 34 15
06 29 30 31 32 33 14
07 08 09 10 11 12 13
推荐学习目录:Python函数参数传递机制
相关文章推荐
- Python高级编程技巧实战 基于Python项目与面试题讲解
- python项目实战三个小实例
- 项目视频讲解_Python实战开发之Pyramid Web框架在商城项目中的应用(模版引擎、布局引擎、JSON)
- python爬虫实战小项目
- JAVA从菜鸟【入门】到新手【实习】一一Python制作的第一个实战项目“网络爬虫”
- Python3 大型网络爬虫实战 003 — scrapy 大型静态图片网站爬虫项目实战 — 实战:爬取 169美女图片网 高清图片
- Python 数据分析微专业课程--项目实战11 中国城市资本流动问题探索
- 手把手教导实战Python Web项目
- python项目实战:天眼查询你所需的公司信息
- 【python项目实战】BBS论坛(2)页面初始设计
- python3.6+selenium3.13 自动化测试项目实战一
- 廖大python实战项目第四天
- 最新Python人工智能学习启蒙项目实战(完整)
- python十个实战项目
- Python项目实战
- 下载大数据实战课程第二季基于Python机器学习、项目案例实战
- 手把手教导实战Python Web项目
- Python 0基础练手项目,有哪些值得推荐?附实战项目+学习图谱
- 最新Python安全工具开发应用项目实战(全套完整)
- 十个Python练手的实战项目,学会这些Python就基本没问题了