知行编程网知行编程网  2022-03-26 02:00 知行编程网 隐藏边栏 |   抢沙发  1 
文章评分 0 次,平均分 0.0

进阶的路上一定少不了刷题,少不了实战,少不了日日夜夜的练习!很多人抱怨自己的功力始终没有提高,有一种书到用数方恨少的感觉,其实还是练少了,而且要精练,单题海战术也不行,提高单位时间的利用率。


刚入门的人你去刷Leetcode合适吗,你连基本的算法都不懂,轻者吐血,刷了一天没有头绪,重者从入门到放弃,选择合适的循序渐进最为重要。年前我们在小密圈选了一部分的题目,进行精刷,这些题目都是我过滤出来的,精选出来的,结合趣味和知识,淡妆浓抹总相宜。


学Python好久总是无法提升,你有没有思考过为啥


下面我拿出其中的一道题,这一道题有5种解法,非常适合进阶提高的同学仔细推敲,一起来看一下。

01

检查信用卡

给定一个信用卡号码,我们可以通过一些基本知识来确定发行人/供应商是谁。

完成get_issuer()将使用下面显示的值的功能来确定给定卡号的发卡机构。如果数字不匹配,则该函数应返回该字符串Unknown

学Python好久总是无法提升,你有没有思考过为啥


测试用例:


先不要看答案,自己动手思考几分钟...


学Python好久总是无法提升,你有没有思考过为啥


解法一:

学Python好久总是无法提升,你有没有思考过为啥

菜鸟解法就是比较平铺直叙,数据结构上直接就用列表和字典构建,然后遍历列表进行匹配即可!


解法二:

学Python好久总是无法提升,你有没有思考过为啥

点评这种解法非常巧妙,函数体内一行搞定,数据结构设计的时候就很妙,跟上面的不太一样。

第一,利用字典数据结构,字典是hash结构,遍历速度快,比列表要快n倍,性能上高。

第二,字典的Key设计很讲究,整体的思路也是遍历字典,但是字典的Key使用元组包裹,想到用元组作为key,这样的写法都是老手所为!

也就是信用卡的开头数组,但是字符串匹配的开头的时候如果用startswith函数,一定要是字符串类型,所以又有的map函数把数字转换为字符。

第三,利用next函数,一般next函数都是跟生成器相关的,就是不断的循环可迭代的对象。这里用next来迭代整个字典,如果遍历之后找不到,显示Unknow. 这样的写法极其老道,可能写成下面的做法,更适合理解:


学Python好久总是无法提升,你有没有思考过为啥


解法三:

学Python好久总是无法提升,你有没有思考过为啥

点评,这return里面大作文章这样的用法也是比较老道的,而且用了5层的if else if else ,算是5目运算了!

大部分return里面用这样的写法:


解法四:

学Python好久总是无法提升,你有没有思考过为啥

点评,利用namedtuple这样的轻量级类完成是最好的,直观而且简洁!这种数据结构的设计非常不错。

把搜索的结果放在一个列表里面,结果是True/False ,巧妙的用了any来快速处理!省去了再次遍历的麻烦。


解法五:

学Python好久总是无法提升,你有没有思考过为啥

用正则去匹配非常简洁,上面的匹配需要2个条件一个是startswith和len(num) in length,而正则只需要用[47].{13}这样几个字符串就描述了上面复杂的表达式,确实厉害!


02

实战训练


上面只是我们刷题的其中一小部分,里面还有很多精妙的招式,我都总结成pdf,并且每一道题目都详细的点评,如果静下心来好好吸收一波,一定功力大涨,收益匪浅。


学Python好久总是无法提升,你有没有思考过为啥

现在我们要把良好的学习氛围继续下去,我们下一轮的实战一起学又要开始啦,一起实战练习,然后提问,思考,最后吸收!如果你想提高自己的 Python功力欢迎加入我们,越早加入越划算!本群已经近400人,满500人就满员了

学Python好久总是无法提升,你有没有思考过为啥



 长按下面的二维码

118降为99

加入星球


没有参加上一轮刷题的,不要紧我已经把总结的精华pdf放在星球里面,下一轮的实战练习群即将打响,等你一起来提高功力,不要再错过了!


上期刷题:

不废话,学Python就是这条捷径


本篇文章来源于: 菜鸟学Python

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享