为什么有这个系列的文章

一直想写一些更加基础的文章,但是总是想不到好的点子,最近到了就业季,一大堆学生面临就业了,正好,从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]) # 结果为6
sum([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=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

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

  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道面试题回答完毕~不知道你学到了多少,下篇博客见哦!

她专科学历

27岁从零开始学习c,c++,python编程语言

29岁编写百例教程

30岁掌握10种编程语言,

用自学的经历告诉你,学编程就找梦想橡皮擦

欢迎关注她的公众号,非本科程序员

Python基础面试,看这篇文章画重点吧,Python面试题No1的更多相关文章

  1. Kafka面试,看这篇文章就够了

    原文链接:https://mp.weixin.qq.com/s/zxPz_aFEMrshApZQ727h4g** 引言 MQ(消息队列)是跨进程通信的方式之一,可理解为异步rpc,上游系统对调用结果的 ...

  2. Java设计模式(十三) 别人再问你设计模式,叫他看这篇文章

    原创文章,转载请务注明出处 OOP三大基本特性 封装 封装,也就是把客观事物封装成抽象的类,并且类可以把自己的属性和方法只让可信的类操作,对不可信的进行信息隐藏. 继承 继承是指这样一种能力,它可以使 ...

  3. Vue开发入门看这篇文章就够了

    摘要: 很多值得了解的细节. 原文:Vue开发看这篇文章就够了 作者:Random Fundebug经授权转载,版权归原作者所有. 介绍 Vue 中文网 Vue github Vue.js 是一套构建 ...

  4. vs2010如何安装mvc3,怎样安装,详细的步骤,从哪下载?请看这篇文章。

    vs2010如何安装mvc3,怎样安装,详细的步骤,从哪下载?请看这篇文章. 安装步骤:vs2010 -> vs2010sp1 -> AspNetMVC3Setup -> AspNe ...

  5. [ZZ]如果有人问你数据库的原理,叫他看这篇文章

    如果有人问你数据库的原理,叫他看这篇文章 http://blog.jobbole.com/100349/ 文章把知识链都给串起来,对数据库做一个概述. 合并排序 阵列.树和哈希表 B+树索引概述 数据 ...

  6. Elasticsearch 5.0 —— Head插件部署指南(Head目前支持5.0了!请不要看本篇文章了)

    使用ES的基本都会使用过head,但是版本升级到5.0后,head插件就不好使了.下面就看看如何在5.0中启动Head插件吧! Head目前支持5.0了!请不要看本篇文章了 Head目前支持5.0了! ...

  7. 一直对zookeeper的应用和原理比较迷糊,今天看一篇文章,讲得很通透,分享如下(转)

    本文转自http://blog.csdn.net/gs80140/article/details/51496925 一直对zookeeper的应用和原理比较迷糊,今天看一篇文章,讲得很通透,分享如下: ...

  8. 用 Python 分析咪蒙1013篇文章,她凭什么会火?

    咪蒙 文学硕士,驾驭文字能力极强.并且是一个拥有一千多万粉丝,每篇文章阅读量都   100W+,头条发个软文都能赚 80 万,永远都能抓住粉丝G点的那个女人. 1月份因为某篇文章,在网络上被一大批网友 ...

  9. 数据可视化之PowerQuery篇(四)二维表转一维表,看这篇文章就够了

    https://zhuanlan.zhihu.com/p/69187094 数据分析的源数据应该是规范的,而规范的其中一个标准就是数据源应该是一维表,它会让之后的数据分析工作变得简单高效. 在之前的文 ...

随机推荐

  1. PHP判断客户端是否使用代理服务器及其匿名级别

    要判断客户端是否使用代理服务器,可以从客户端所发送的环境变量信息来判断. 具体来说,就是看HTTP_VIA字段,如果这个字段设置了,说明客户端使用了代理服务器. 匿名级别可以参考下表来判断. 给出一个 ...

  2. 如何优雅的关闭Java线程池

    面试中经常会问到,创建一个线程池需要哪些参数啊,线程池的工作原理啊,却很少会问到线程池如何安全关闭的. 也正是因为大家不是很关注这块,即便是工作三四年的人,也会有因为线程池关闭不合理,导致应用无法正常 ...

  3. Solr(三)向solr-5.5.4中添加数据

    Solr添加数据 一 首先在创建好的CORE中添加自己需要的Field(可以理解为表的字段) 1 切换到配置Field的文件目录,编辑配置Field的文件 managed-schema cd /usr ...

  4. leetCode刷题(找到最长的回文字符串)

    Given a string, find the length of the longest substring without repeating characters. Examples: Giv ...

  5. 基于分支限界法的旅行商问题(TSP)一

    旅行推销员问题(英语:Travelling salesman problem, TSP)是这样一个问题:给定一系列城市和每对城市之间的距离,求解访问每一座城市一次并回到起始城市的最短回路.它是组合优化 ...

  6. mysql学习 第二章 数据库的基本操作

    3.1   创建数据库 MySQL安装好之后,首先需要创建数据库,这是使用MySQL各种功能的前提.本章将详细介绍数据的基本操作,主要内容包括:创建数据库.删除数据库.不同类型的数据存储引擎和存储引擎 ...

  7. PAT1004:Counting Leaves

    1004. Counting Leaves (30) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A fam ...

  8. Boyer-Moore(BM)算法,文本查找,字符串匹配问题

    KMP算法的时间复杂度是O(m + n),而Boyer-Moore算法的时间复杂度是O(n/m).文本查找中“ctrl + f”一般就是采用的BM算法. Boyer-Moore算法的关键点: 从右遍历 ...

  9. ehcache与redis的比较与应用场景分析(转)

    ehcache直接在jvm虚拟机中缓存,速度快,效率高:但是缓存共享麻烦,集群分布式应用不方便.redis是通过socket访问到缓存服务,效率比ecache低,比数据库要快很多,处理集群和分布式缓存 ...

  10. SSM-SpringMVC-18:SpringMVC中参数自动装配

     ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 在处理方法中,参数写上之后,只要符合特定规则,就可以自动装配 首先 其次是:自定义的参数的自动装配: 案例如 ...