Python项目实战:绕圈圈面试题
下面是来自某知名公司的一道“面试题”:给定 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项目实战 —— 04. 淘宝用户行为分析
Python项目实战 Python项目实战--目录 Python项目实战 -- 04. 淘宝用户行为分析 一.背景 二.解题思路 三.数据分析 3.1 数据清洗 3.2 数据分析 3.2.1 用户整体 ...
- Python项目实战:数据可视化与股票数据分析-关东升-专题视频课程
Python项目实战:数据可视化与股票数据分析-333人已学习 课程介绍 本视频内容包括使用Matplotlib绘制图表.MySQL数据库.Python访问数据库和Lambda表达式. ...
- Python项目实战:使用PySpark对大数据进行分析
Python项目实战:使用PySpark对大数据进行分析 大数据,顾名思义就是大量的数据,一般这些数据都是PB级以上.PB是数据存储容量的单位,它等于2的50次方个字节,或者在数值上大约等于1000个 ...
- python项目实战——银行取款机系统(七)
项目实战目录 python项目实战--银行取款机系统(一) python项目实战--银行取款机系统(二) python项目实战--银行取款机系统(三) python项目实战--银行取款机系统(四) p ...
- python项目实战——银行取款机系统(一)
项目实战目录 python项目实战--银行取款机系统(一) 前言 今天我们将通过python完成简易银行提款机系统的实战,我们一步步实现我们的要求.话不多说,看操作. 环境使用 python 3.9 ...
- python项目实战——银行取款机系统(六)
项目实战目录 python项目实战--银行取款机系统(一) python项目实战--银行取款机系统(二) python项目实战--银行取款机系统(三) python项目实战--银行取款机系统(四) p ...
- Python项目实战:开发PetStore宠物商店项目-关东升-专题视频课程
Python项目实战:开发PetStore宠物商店项目-487人已学习 课程介绍 课程内容包括项目分析与设计过程.数据库设计过程.项目敏捷开发.MySQL数据库.Python访问数据库 ...
- Python项目实战 —— 02. 疫情前后全国人口流动可视化大屏
Python项目实战 Python项目实战--目录 Python项目实战 -- 02. 疫情前后全国人口流动可视化大屏 一.背景 二.数据分析 2.1 数据处理 2.2 画图 2.3 展示 三.可视化 ...
- python项目实战——银行取款机系统(二)
项目实战目录 python项目实战--银行取款机系统(一) python项目实战--银行取款机系统(二) 前言 环境使用 python 3.9 pycharm 模块使用 requests random ...
- Python项目实战 —— 01. 疾病预测结构化数据
Python项目实战 Python项目实战--目录 Python项目实战 -- 01. 疾病预测结构化数据 一.背景 二.解题思路 三.数据分析 3.1 数据清洗 3.2 数据分析 3.2.1 相关系 ...
最新文章
- 浅谈《think in java》:一 对象导论总结
- Java中泛型的使用场景
- 【入门1】顺序结构 (今天刷洛谷了嘛)
- Python学习之旅:使用Python实现Linux中的ls命令
- 四大浏览器再战Windows平台:Opera勇夺第一
- python编程读取文件内容_python编程从入门到实践:读取整个文件和创建包含文件各行的内容...
- 几款主流电子电路仿真软件优缺点比较
- css给文字设置动态效果,利用纯CSS实现动态的文字效果实例
- hart协议c语言,简述HART协议命令和语言
- 推导手机QQ聊天记录db文件加密IMEI值
- win10计算机文件夹隐藏,详细教您win10如何隐藏文件夹
- 一元二次方程组的简单解法
- UIUC云计算概念(chord)
- 完美日记小红书社群运营:KOL的私域流量运营
- 64马8赛道取前4问题
- 西电复试之——CCF 201912-1 报数
- 计算机二级的Word知识点,计算机二级word知识点「干货」
- 学习@Transaction异常自动回滚以及手动回滚和回滚部分SQL服务
- 编译阶段打印宏定义的内容
- 基于STM32的安卓蓝牙多功能遥控车
热门文章
- 4.11 51单片机-LCD1602显示屏
- 胡昌泽 day4笔记
- 什么是SPU和SKU
- Android中管理代码基本工作流程
- 浅谈大数据平台架构设计
- 基于Java毕业设计车辆调度管理系统源码+系统+mysql+lw文档+部署软件
- 小朋友你是否有很多问号图_小朋友你是否有很多问号表情包
- Java设计模式之Builder模式
- hdr(host), hdr_beg(host) , path_beg
- android listview 资源回收,ListView的回收机制如何运作