今天看消息说,潘石屹NCT考试得了 99 分,很好奇学了半年Python的他,现在Python水平到底如何。然后就去翻看他的微博,发现一个有意思的 tag:潘石屹用Python解决100个问题。此tag的第一条微博发布在 3月 19日,自此潘石屹几乎每天发一篇编程题的微博。
通过观察他每天练习的这些编程题,我们或许能一定程度上了解他的编程水平。
下面是他上传到微博的第一道编程题:
透过这些题,我们可以了解潘石屹每天学习哪些编程题?难度又如何?可能会更加客观的认识潘总学Python.
上面这题的无重复个数:
A_4^3 = 24不同的三位数分别都是哪些,此题给出就这4位数字,枚举出来当然不难,但是如果有n多位数字列举不同3位数,难度就会大增。
2 最小公倍数两数的最小公倍数是指能同时被两数相除的数,如3和6的最小公倍数是 12,用Python实现如下。
如果其中一个数是另一个数的倍数,则它就是最小公倍数,否则相对大的数逐渐加1,直到满足同时被除。
def lcm(a,b): big = max(a,b) while True: if big % a == 0 and big % b == 0: rtn = big break big += 1 # return rtn 3 水仙花数水仙花数
a的定义如下,首先是三位数,然后每位数的三次幂和等于本身:
sum_{i=1}^3a_i^3 == a实现代码如下,注意Python 使用 // 求商,不要和Java 混淆写为/.
def Narcissistic(a): if a < 100 or a > 999: return False a1 = a // 100 # 最高位数字 a2 = a // 10 % 10 a3 = a // 1 % 10 # 最低位数字 print(a1,a2,a3) return a1**3 + a2**3 + a3**3 == a 4 正则表达式不仅感叹潘总的Python进步飞快啊,都已经开始玩正则了。
像上面的题目,需要掌握常用的正则通配符:
s 匹配空白,即空格,tab键d 匹配数字,即0-9W 匹配特殊字符,即非字母、非数字、非汉字、非_,注意包括空格import re def re_count(a): spa_cnt = len(re.findall('s',a)) num_cnt = len(re.findall('d',a)) oth_cnt = len(re.findall('W',a)) return spa_cnt,num_cnt,oth_cnt-spa_cnt re_count('$I Love Python 666 $') # 4,3,2 5 杨辉三角杨辉三角的性质:从三行开始,等于上一行对应位置元素和前一个元素的和。
使用生成器打印杨辉三角前10行:
def triangles(): rtn = [1] while True: yield rtn rtn = [1] + [rtn[i] + rtn[i+1] for i in range(len(rtn)-1)] + [1]与 for 结合打印:
n = 0 for t in triangles(): print(t) n = n + 1 if n == 10: break结果如下:
[1] [1, 1] [1, 2, 1] [1, 3, 3, 1] [1, 4, 6, 4, 1] [1, 5, 10, 10, 5, 1] [1, 6, 15, 20, 15, 6, 1] [1, 7, 21, 35, 35, 21, 7, 1] [1, 8, 28, 56, 70, 56, 28, 8, 1] [1, 9, 36, 84, 126, 126, 84, 36, 9, 1] 6 位运算潘总玩了这几个位运算:
7 绘制坐标系潘总也喜欢玩海龟:
绘制代码写的真不错,直接参考潘总的:
import turtle p = turtle.Pen() for i in range(4): for i in range(3): p.forward(100) p.dot(5) p.goto(0,0) p.left(90) p.dot(5) p.hideturtle() turtle.done() 8 加密解码最近玩的一道题:加密密码
这道题就比较简单了,Python 实现交换操作很方便:
def convert(a): rtn = [] for i in a: rtn.append((i+5)%10) rtn[0],rtn[3] = rtn[3],rtn[0] rtn[1],rtn[2] = rtn[2],rtn[1] return rtn convert([1,3,5,7]) # [2, 0, 8, 6] convert([2,0,8,6]) # [1, 3, 5, 7]以上就是节选的8道题的求解过程,通过这些题我们可了解到潘石屹练习的这些编程题的难度,可以得出初步结论:潘总Python已经入门。
他微博里还有一些比较有意思的编程题,如约瑟夫环问题 , 五猴分桃等,感兴趣的可以去看看。
<完>
---来自腾讯云社区的---double
微信扫一扫打赏
支付宝扫一扫打赏