前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >潘石屹首次 Python 考试99分,那么他练习了哪些编程题,Python水平到底如何?

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

作者头像
double
发布2020-05-21 10:44:49
6990
发布2020-05-21 10:44:49
举报
文章被收录于专栏:算法channel算法channel

1 潘石屹学Python

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

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

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

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

上面这题的无重复个数:

A_4^3 = 24

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

2 最小公倍数

两数的最小公倍数是指能同时被两数相除的数,如3和6的最小公倍数是 12,用Python实现如下。

如果其中一个数是另一个数的倍数,则它就是最小公倍数,否则相对大的数逐渐加1,直到满足同时被除。

代码语言:javascript
复制
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 混淆写为/.

代码语言:javascript
复制
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 匹配特殊字符,即非字母、非数字、非汉字、非_,注意包括空格
代码语言:javascript
复制
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行:

代码语言:javascript
复制
def triangles():
    rtn = [1]
    while True:
        yield rtn
        rtn = [1] + [rtn[i] + rtn[i+1] for i in range(len(rtn)-1)] + [1]

与 for 结合打印:

代码语言:javascript
复制
n = 0 
for t in triangles():
    print(t)
    n = n + 1
    if n == 10:
        break

结果如下:

代码语言:javascript
复制
[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 绘制坐标系

潘总也喜欢玩海龟:

绘制代码写的真不错,直接参考潘总的:

代码语言:javascript
复制
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 实现交换操作很方便:

代码语言:javascript
复制
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已经入门。

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

<完>

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员郭震zhenguo 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 潘石屹学Python
  • 2 最小公倍数
  • 3 水仙花数
  • 4 正则表达式
  • 5 杨辉三角
  • 6 位运算
  • 7 绘制坐标系
  • 8 加密解码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档