1 潘石屹学Python
今天看消息说,潘石屹NCT考试得了 99 分,很好奇学了半年Python的他,现在Python水平到底如何。然后就去翻看他的微博,发现一个有意思的 tag:潘石屹用Python解决100个问题。此tag的第一条微博发布在 3月 19日,自此潘石屹几乎每天发一篇编程题的微博。
通过观察他每天练习的这些编程题,我们或许能一定程度上了解他的编程水平。
下面是他上传到微博的第一道编程题:
透过这些题,我们可以了解潘石屹每天学习哪些编程题?难度又如何?可能会更加客观的认识潘总学Python.
上面这题的无重复个数:
不同的三位数分别都是哪些,此题给出就这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 水仙花数
水仙花数 的定义如下,首先是三位数,然后每位数的三次幂和等于本身:
实现代码如下,注意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-9\W
匹配特殊字符,即非字母、非数字、非汉字、非_,注意包括空格
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已经入门。
他微博里还有一些比较有意思的编程题,如约瑟夫环问题
, 五猴分桃
等,感兴趣的可以去看看。
<完>
你还可以看:
原创文章,请多关照
你点的每个“在看”,我都认真当成了喜欢