首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

推荐3道趣味Python题,菜鸟来挑战一下

Python虽然入门容易,但是涉及的知识点非常多,而且技巧性很强!这些技巧就像一串一串的珠子,需要一些题目不断的练手才能熟练掌握串联起来,把知识点掌握牢固!今天我就精选了3道趣味的Python题目,大家一起动动手,练起来!

1.寻找有趣的数字

给定两个整数m,n(1

例如:

42的除数:1,2,3,6,7,14,21,42。

除数的平方:1,4,9,36,49,196,441,1764。

平方除数的总和是:2500显然,2500 = 50 *50

满足题意,所以42是一个有效的数字,应该返回[42, 2500]

菜鸟解法:

遍历m,n范围内的数字:

计算每个数字的所有除数的平方和z

判断z是否是完全平方数,满足条件,则加入到结果中

菜鸟代码:

高手解法:

将范围内的每个数字作为key,该数字的所有除数的平方为value,构建字典映射数据关系

判断字典中的value是否是完全平方数

点评:

巧妙的利用字典数据关系,将每个数字和它所有除数的平方和关系起来,节约数据空间,便于以后的操作;然后判断该平方和数是否为完全平方数,过滤出符合条件的数字。

2.蜗牛数组

给定n×n数组,将从最外层元素排列的数组元素返回到中间元素,顺时针移动。

为了更好地理解,请连续遵循下一个数组的编号:

下面这张图片更加清楚的说明了题意:

菜鸟解法:

利用递归的思想,如果列表不为空:

获取数组中的第一个列表中的值

将除去第一个列表的数组通过zip函数将列表的数组进行行转列(列转行)

点评:

菜鸟解法利用zip()函数将数组进行行转列(列转行)来解决90度取值的问题。

高手解法:

利用numpy中rot90实现数组的行转列(列转行),然后获取第一行数组值

点评:

利用numpy来将数组进行行转列(列转行),巧妙解决该问题。

3.帮助John写一个电话簿程序

John有一个旧个人电话簿文本文件。在文件的每一行,都是由姓名,电话号码和住址组成,但是这三者顺序并不固定,而且混杂着一些非字母数字的字符。

num格式为 + X-abc-def-ghij(其中X代表1或2个数组字)

之间的内容为该电话号码的name

剩下的字符串的是address

帮助John写一个程序,让他输入他的电话簿文件的内容,和他想要查的电话号码,然后依次返回num,name和address,按照如下格式:

“Phone => num,Name => name,Address => adress”

查找情况分为以下三种:

如果根据num查找出有且仅有1条文本记录,那么将上述的格式化字符串返回给John

如果根据num查找出至少有2条文本记录,返回:"Too many people: num"

如果根据num查找没有文本记录,返回:"Not found: num"

示例1:

(左右滑动查看代码)

示例2:

(左右滑动查看代码)

示例3:

(左右滑动查看代码)

菜鸟解法

思路:从电话簿中计算电话号码出现的次数,排除掉下面两种情况:

出现的次数为0 => "Error => Not found: "

出现的次数大于1次 => "Error => Too many people: "

如果出现的次数等于1次,则查找出该电话号码所在的列,然后根据正则规则查找出name,address,然后返回

点评菜鸟代码的亮点:

根据电话号码出现的次数来排除掉两种结果

最后再考虑比较复杂的情况,即电话号码只出现了一次,然后根据正则匹配出电话号码和姓名,将两者过滤掉得出地址。

高手解法:

1).将电话簿字符串除了+、之外的符号全部替换成一个空格2).将电话簿按行分割,遍历每行字符串: 按照正则匹配出相应的name,phone,address,并格式化字符串 判断phone==num,将格式化后的字符串放入结果列表中3).计算结果列表的长度,来判断最终输出结果

编程本身就是算法+数据结构的融合,而且实战性非常强!听别人道百遍说千遍不如自己动手敲一遍,很多奥妙只有在代码运行的时候才能体会,对自己的功力提升大有好处!

马上周末了,也不要忘记编程哦,欢迎大家留言讨论!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190104B0FGYU00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券