潘石屹首次 Python 考试99分,那么他练习了哪些编程题,Python水平到底如何?

1 潘石屹学Python

今天看消息说,潘石屹NCT考试得了 99 分,很好奇学了半年Python的他,现在Python水平到底如何。然后就去翻看他的微博,发现一个有意思的 tag:潘石屹用Python解决100个问题。此tag的第一条微博发布在 3月 19日,自此潘石屹几乎每天发一篇编程题的微博。

通过观察他每天练习的这些编程题,我们或许能一定程度上了解他的编程水平。

下面是他上传到微博的第一道编程题:

潘石屹首次 Python 考试99分,那么他练习了哪些编程题,Python水平到底如何?_第1张图片

透过这些题,我们可以了解潘石屹每天学习哪些编程题?难度又如何?可能会更加客观的认识潘总学Python.

上面这题的无重复个数:

不同的三位数分别都是哪些,此题给出就这4位数字,枚举出来当然不难,但是如果有n多位数字列举不同3位数,难度就会大增。

2 最小公倍数

潘石屹首次 Python 考试99分,那么他练习了哪些编程题,Python水平到底如何?_第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 考试99分,那么他练习了哪些编程题,Python水平到底如何?_第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 考试99分,那么他练习了哪些编程题,Python水平到底如何?_第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 杨辉三角

潘石屹首次 Python 考试99分,那么他练习了哪些编程题,Python水平到底如何?_第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 位运算

潘石屹首次 Python 考试99分,那么他练习了哪些编程题,Python水平到底如何?_第6张图片

潘总玩了这几个位运算:

潘石屹首次 Python 考试99分,那么他练习了哪些编程题,Python水平到底如何?_第7张图片

7 绘制坐标系

潘总也喜欢玩海龟:

潘石屹首次 Python 考试99分,那么他练习了哪些编程题,Python水平到底如何?_第8张图片绘制代码写的真不错,直接参考潘总的:

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 考试99分,那么他练习了哪些编程题,Python水平到底如何?_第9张图片

这道题就比较简单了,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已经入门。

他微博里还有一些比较有意思的编程题,如约瑟夫环问题 , 五猴分桃等,感兴趣的可以去看看。

<完>

你还可以看:

重磅发布!《动手学深度学习》PDF 版今天终于可以下载

我的 40 篇精选原创文章

60 个神器小插件

潘石屹首次 Python 考试99分,那么他练习了哪些编程题,Python水平到底如何?_第10张图片

原创文章,请多关照

你点的每个“在看”,我都认真当成了喜欢

你可能感兴趣的:(潘石屹首次 Python 考试99分,那么他练习了哪些编程题,Python水平到底如何?)