Python基础面试,看这篇文章画重点吧,Python面试题No1
Python基础面试,看这篇文章画重点吧,Python面试题No1
为什么有这个系列的文章
一直想写一些更加基础的文章,但是总是想不到好的点子,最近到了就业季,一大堆学生面临就业了,正好,从Python的面试题出发,分析和解答一些常见的面试题,并且总结一些文字。
每一讲涉及5~10道面试题,整个系列的文章初步规划有20篇。
今天的面试题
第1题:1行代码实现1到100的和?
分析:这题考察的是对Python内置函数的了解程度
Python常见的内置函数有
python内置函数
官方查询手册如下
https://docs.python.org/3/library/functions.html
图片中我框选的是比较常用的一些,你可能见过,这题考察的是sum也就是求和
具体的使用
sum(iterable[, start])
iterable -- 可迭代对象,如:列表、元组、集合。
start -- 指定相加的参数,如果没有设置这个值,默认为0。
例如
sum([1,2,3]) # 结果为6
sum([1,2,3],5) # 结果为11
python一行代码如何实现1~100的和
还要用到第二个内置函数 range()
range(start, stop[, step])
start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
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=1
y=1
print(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 time
def fibo(max):
n, a, b = 0, 0, 1 while n < max: yield b a, b = b, a + b n = n + 1
t1 = time.clock()
for n in fibo(100):
print (n)
t2 = time.clock()
print(t2-t1)
解法4:
使用列表查看一下速度
import time
def 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
了解这个内容,这道题回答起来就非常简单了
os模块
re模块
pickle 模块
datetime模块
time模块
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())
原文地址https://www.cnblogs.com/happymeng/p/10789321.html

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
C# - 如何让类型可以比较
C# - 如何让类型可以比较IComparable.NET 里,IComparable是用来作比较的最常用接口。 如果某个类型的实例需要与该类型的其它实例进行比较或者排序的话,那么该类型就可以通过实现IComparable接口来达到此目的。 IComparable只提供了一个方法: 先看一个例子,这里使用了string,因为string实现了该接口: 其结果是: string是通过按位字母进行比较的,“a”就小于“b”,所以上述str1应该是小于str2的。 而CompareTo方法返回的是int类型,而比较的结果呢,可能有三种情况: x == yx < yx > y再通过上面的例子,我们可以看出来: 针对x.CompareTo(y), 如果 x == y,那么 结果 = 0如果 x < y,那么结果 < 0如果 x > y,那么结果 > 0 我们可以把代码重构一下,提取出一个低级别方法,便于逻辑复用: 顺便提一下,string并没有实现> < == 等等操作符。 int所有的原始类型都实现了IComparable。 所以使用上面的方法,...
- 下一篇
Java集合 - List介绍及源码解析
Java集合 - List介绍及源码解析(源码版本为 JDK 8) 集合类在java.util包中,类型大体可以分为3种:Set、List、Map。 JAVA 集合关系(简图)#集合.jpg (图片来源网络) List集合和Set集合都是继承Collection接口,是List和Set的最上级接口,包含如下方法: Collection接口.png List 集合#List是一个有序集合(也称为序列),你可以控制每个元素被插入的位置,和根据索引访问列表中元素。List集合元素可以重复,也可以存入 null 元素。 List集合是可以根据索引来操纵集合,所以List接口在Collection接口基础增加了一些根据索引操纵集合的接口方法。 List接口.png 集合接口的实现类#List 集合有两个常用实现,ArrayList和LinkedList,内部采用不同数据结构来实现,不同场景下有不同的使用选择。 ArrayList ArrayList类-1.png ArrayList类除了继承和实现集合接口外,还实现了RandomAccess, Cloneable接口。说明ArrayList支持克...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,8上快速安装Gitea,搭建Git服务器