写点什么

Python 基础面试,看这篇文章画重点吧,Python 面试题 No1

发布于: 刚刚

为什么有这个系列的文章

一直想写一些更加基础的文章,但是总是想不到好的点子,最近到了就业季,一大堆学生面临就业了,正好,从 Python 的面试题出发,分析和解答一些常见的面试题,并且总结一些文字。


每一讲涉及 5~10 道面试题,整个系列的文章初步规划有 20 篇。

今天的面试题

第 1 题:1 行代码实现 1 到 100 的和?

分析:这题考察的是对 Python 内置函数的了解程度


Python 常见的内置函数有



官方查询手册如下https://docs.python.org/3/library/functions.html


图片中我框选的是比较常用的一些,你可能见过,这题考察的是 sum 也就是求和具体的使用


sum(iterable[, start])


  1. iterable -- 可迭代对象,如:列表、元组、集合。

  2. start -- 指定相加的参数,如果没有设置这个值,默认为 0。


例如


sum([1,2,3]) # 结果为6sum([1,2,3],5) # 结果为11
复制代码


python 一行代码如何实现 1~100 的和


还要用到第二个内置函数 range()


range(start, stop[, step])


  1. start: 计数从 start 开始。默认是从 0 开始。例如 range(5)等价于 range(0, 5);

  2. stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有 5

  3. step:步长,默认为 1。例如:range(0, 5) 等价于 range(0, 5, 1)


解答:


sum(range(1,101))
复制代码

第 2 题:如何使用 Python 输出一个[斐波那契数列]Fibonacci

斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”。


例子:1、1、2、3、5、8、13、21、34、……


解法 1:


100 以内的斐波那契数列


x=1y=1print(x,end=" ")print(y,end=" ")while(True):    z=x+y    x=y    y=z    if(z>100):   #当z>100的时候,终止循环        break
print(z,end=" ")
复制代码


解法 2:


递归的办法,这个需要数学公式的记忆了


在数学上,斐波纳契数列以如下被以递归的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)


#递归def fibo(n):      if n <= 1:        return n    else:        return (fibo(n - 1) + fibo(n - 2)) m = int(input("打印前多少项?"))if m <= 0:    print("请输入正整数!")else:    print("fibo:")    for i in range(1,m):        print(fibo(i))
复制代码


解法 3:


迭代,用递归当数据大的时候,会出现效率问题


def fibo(max):    n, a, b = 0, 0, 1    while n < max:        yield b        a, b = b, a + b        n = n + 1  # 退出标识for n in fibo(5):    print (n)
复制代码


经过试验,比迭代速度快很多 time.clock()说明


  • cpu 的运行机制:cpu 是多任务的,例如在多进程的执行过程中,一段时间内会有对各进程被处理。一个进程从从开始到结束其实是在这期间的一些列时间片断上断断续续执行的。所以这就引出了程序执行的 cpu 时间(该程序单纯在 cpu 上运行所需时间)和墙上时钟 wall time。

  • time.time()是统计的 wall time(即墙上时钟),也就是系统时钟的时间戳(1970 纪元后经过的浮点秒数)。所以两次调用的时间差即为系统经过的总时间。

  • time.clock()是统计 cpu 时间 的工具,这在统计某一程序或函数的执行速度最为合适。两次调用 time.clock()函数的插值即为程序运行的 cpu 时间。


import timedef fibo(max):    n, a, b = 0, 0, 1    while n < max:        yield b        a, b = b, a + b        n = n + 1t1 = time.clock()for n in fibo(100):    print (n)    t2 = time.clock()
print(t2-t1)
复制代码


解法 4:使用列表查看一下速度


import timedef fibo(n):
result_list = [] a, b = 0, 1 while n > 0: result_list.append(b) a, b = b, a + b n -= 1 return result_list
t1 = time.clock()print(fibo(1000))t2 = time.clock()print(t2-t1)
复制代码


当然,我看到一篇比较牛 X 的博客,博主后面 2 个办法,实在高级,贴给大家


https://blog.csdn.net/chichu261/article/details/83589767

第 3 题:列出几个 python 标准库

你先明确的是什么是 Python 标准库


Python 标准库(standard library)。标准库会随着 Python 解释器,一起安装在你的电脑中的。它是 Python 的一个组成部分。这些标准库是 Python 为你准备好的利器,可以让编程事半功倍。


文档手册可以查阅 > https://docs.python.org/zh-cn/3.7/library/index.html


了解这个内容,这道题回答起来就非常简单了


  1. os 模块

  2. re 模块

  3. pickle 模块

  4. datetime 模块

  5. time 模块

  6. math 模块

第 4 题:下面 Python 代码的运行结果是?

这种题目,考察的是代码默读能力



def f(x,l=[]): for i in range(x): l.append(i*i) print(l)f(2) f(3,[3,2,1])f(3)
复制代码


  • f(2)


def f(2,l=[]):    for i in range(2): # i=0,1        l.append(i*i) # [0,1]    print(l)
复制代码


  • f(3,[3,2,1])


def f(3,l=[3,2,1]):    for i in range(3): # i=0,1,2        l.append(i*i) # [3,2,1,0,1,4]    print(l)
复制代码


  • f(3)


def f(3,l=[]):    for i in range(3): # i=0,1,2        l.append(i*i) # [0,1,4] ???对吗?    print(l)
复制代码


这个地方,你需要避免踩坑,一定要注意列表是可变的,如果单独的写没有任何问题,但是函数调用的三行代码放在一起就有点意思了


f(3,[3,2,1]) 将 l 进行了重新赋值。但是第三次调用函数使用的依旧是第一次的 l,所以避免踩坑哦~~~~


f(3)运行的正确结果是[0,1,0,1,4]


第 5 题:python 实现列表去重的方法?

简单直接的办法,集合里面的元素不可以重复


my_list = [1,1,2,2,3,3,5,6,7,88]my_set = set(my_list)my_list = [x for x in my_set]my_list
复制代码


循环判断去重


ids = [1,1,2,2,3,3,5,6,7,88]news_ids = []for id in ids:    if id not in news_ids:        news_ids.append(id)print(news_ids)
复制代码


字典的 fromkeys 方法实现


my_list=[1,1,2,2,3,3,5,6,7,88]d = {}.fromkeys(my_list)print(d.keys())
复制代码

今天的 5 道面试题答题完毕

nice girl 今天的 5 道面试题回答完毕~不知道你学到了多少,下篇博客见哦!

发布于: 刚刚阅读数: 2
用户头像

爬虫 100 例作者,蓝桥签约作者,博客专家 2021.02.06 加入

6 年产品经理+教学经验,3 年互联网项目管理经验; 互联网资深爱好者; 沉迷各种技术无法自拔,导致年龄被困在 25 岁; CSDN 爬虫 100 例作者。 个人公众号“梦想橡皮擦”。

评论

发布
暂无评论
Python基础面试,看这篇文章画重点吧,Python面试题No1