2020 年最全 Python 面试题汇总 (一)
发布日期:2021-07-01 02:08:16 浏览次数:2 分类:技术文章

本文共 7328 字,大约阅读时间需要 24 分钟。

@Author:Runsen

大四刷题拼offer系列,不拼不行啊。我先刷下牛客网的Python的题目和知识点,适当的记录下自己做错的题目。

文章目录

1、Pythno逻辑运算符

下列代码运行结果是?a = 'a'print a > 'b' or 'c' # 'C'

由于比较运算符优先级大于逻辑运算符,根据上表,当 a > ‘b’,即 ‘a’ > ‘b’ 为 Fasle 时(‘a’ 的 ASCII 码比 ‘b’ 小),返回值为 ‘c’,故答案选C。

2、求100亿有多少素数

假设可以不考虑计算机运行资源(如内存)的限制,以下 python3 代码的预期运行结果是:()

import mathdef sieve(size):    sieve= [True] * size    sieve[0] = False    sieve[1] = False    for i in range(2, int(math.sqrt(size)) + 1):        k= i * 2        while k < size:           sieve[k] = False           k += i    return sum(1 for x in sieve if x)print(sieve(10000000000))A、455052510B、455052511C、455052512D、455052513

本题是求0-100亿之间的素数的个数,首先你要读懂代码。读懂代码后,自己编写Meissel-Lehmer 算法快速求出0-100亿内的素数个数。百度100亿以内的素数,百度没有。但是我们可以记住这个值,关于Meissel-Lehmer算法。

3、深浅复制

本题考查的是 dict 类型中 copy() 方法的使用。

kvps = {
'1' : 1, '2' : 2 }theCopy = kvps.copy()kvps['1'] = 5sum = kvps['1'] + theCopy['1']print(sum) # 6

下面,我们看一个容易出错的例子。

import copyd = {
'1': [1, 1, 1], '2': 2}# 方法1:赋值引用,copy1和d指向同一个对象copy1 = d# 方法2:浅复制,复制生成新对象copy2,但是只复制一层,[1, 1, 1]为两者共同子对象,copy2 = d.copy()# 方法3:浅复制,调用copy模块中的方法,同方法2copy3 = copy.copy(d)# 方法3:深复制,复制生成新对象copy4,并且递归复制所有子对象,所以d中原来指向[1, 1, 1]的改动不会影响深复制生成的子对象[1, 1, 1]copy4 = copy.deepcopy(d)d['1'][0] = 3 d['2'] = 3 print(copy1, copy2, copy3, copy4)打印结果{
'1': [3, 1, 1], '2': 3} {
'1': [3, 1, 1], '2': 2} {
'1': [3, 1, 1], '2': 2} {
'1': [1, 1, 1], '2': 2}

4、装饰器

以下程序输出为:

def w1():   print('正在装饰')   def inner():        print('正在验证权限')    return inner() w1()# 正在装饰 正在验证权限

如果外层函数返回的是一个函数名的话,运行结果应该是:正在装饰

如果外层函数返回的是函数调用的话,运行结果是:正在装饰 正在验证权限

5、random模块

下面的python3函数,如果输入的参数n非常大,函数的返回值会趋近于以下哪一个值

import random def foo(n):           random.seed()     c1 = 0     c2 = 0     for i in range(n):        x = random.random()        y = random.random()        r1 = x * x + y * y        r2 = (1 - x) * (1 - x) + (1 - y) * (1 - y)        if r1 <= 1 and r2 <= 1:           c1 += 1         else:           c2 += 1    return   c1 / c2

random.random()生成0和1之间的随机浮点数float,上面代码是计算两个四分之一的圆的交集,最终得到的结果是

π − 2 4 − π \frac{\pi-2}{4-\pi} 4ππ2

具体解决的如下图所示。

6、元组的定义

下列哪种不是Python元组的定义方式?

A、(1)B、(1, )C、(1, 2)D、(1, 2, (3, 4))

Python 中的 tuple 结构为 “不可变序列”,用小括号表示。为了区别数学中表示优先级的小括号,当 tuple 中只含一个元素时,需要在元素后加上逗号。(1)会被python认为是int类型,所以正确答案必须是(1)

>>> print(type((1,)))
>>> print(type((1)))

7、类定义

有如下类定义,下列描述错误的是?

class A(object):	passclass B(A):	passb = B()A、isinstance(b, A) == TrueB、isinstance(b, object) == TrueC、issubclass(B, A) == TrueD、issubclass(b, B) == True 答案

isinstance(object,classinfo),用于判断object是否是classinfo的一个实例,或者object是否是classinfo类的子类的一个实例,如果是返回True。类似 type()。如果要判断两个类型是否相同推荐使用 isinstance()。

issubclass(class,classinfo),用于判断class是否是classinfo类的子类,如果是返回True.

class A(object):    passclass B(A):    passb = B() print(isinstance(b,A))  # Trueprint(isinstance(b,B))  # Trueprint(type(b) is B) # Trueprint(type(b) is A) # Falseprint(issubclass(B,A)) # Trueprint(issubclass(b,B))    # TypeError: issubclass() arg 1 must be a class

8、函数对象定义

Python中函数是对象,描述正确的是?

A、函数可以赋值给一个变量B、函数可以作为元素添加到集合对象中C、函数可以作为参数值传递给其它函数D、函数可以当做函数的返回值

上面选择全部正确。在 Python 中万物皆为对象,函数也不例外,函数作为对象可以赋值给一个变量、可以作为元素添加到集合对象中、可作为参数值传递给其它函数,还可以当做函数的返回值,这些特性就是第一类对象所特有的。

9、字典的声明定义

下面有关字典的声明错误的是:

A、dic = {
}B、dic = {
100:200}C、dic = {
(1,2,3):'test'}D、dic = {
[1,2,3]:'test'} 答案

字典本身是可变数据类型,字典的键记住两点:

  • 唯一:同一个字典中的键必须唯一,如果出现多个相同的键,则最新的键会被记住;
  • 不可变:键是不可变数据类型,使用可以是int,string,float,tuple

补充可变(mutable)对象类型 :list、dict、set、bytearray、user-defined classes

不可变(immutable)对象类型: int、float、decimal、complex、bool、str、tuple、range、bytes

10、字符串格式化

下述字符串格式化语法正确的是?

正确答案: D   A、'GNU's Not %d %%'  % 'UNIX'B、'GNU\'s Not %d %%'  % 'UNIX'C、'GNU's Not %s %%'   % 'UNIX'D、'GNU\'s Not %s %%'  % 'UNIX'

python里面%d表数字,%s表示字符串,%%表示一个%。单引号内嵌套单引号需要转义字符/;单引号内嵌套双引号不需要嵌套。双引号内嵌套双引号需要转义字符/;双引号内引用单引号不需要转义字符。

11、 内存管理

关于Python内存管理,下列说法错误的是

正确答案: B   A、变量不必事先声明B、变量无须先创建和赋值而直接使用C、变量无须指定类型D、可以使用del释放资源

本题答案选 B,原因如下:

Python 是弱类型脚本语言,变量就是变量,没有特定类型,因此不需要声明。

但每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。
用 del 语句可以释放已创建的变量(已占用的资源)。

12、正则表达式

下列程序打印结果为

import re str1 = "Python's features" str2 = re.match( r'(.*)on(.*?) .*', str1, re.M|re.I)print( str2.group(1))

正确答案: B 你的答案: B (正确)

A、PythonB、PythC、thon’sD、Python‘s features

re模块实现正则的功能 :re.match(正则表达式,要匹配的字符串,[匹配模式])

要匹配的字符串为str1 = "Python's features"

正则表达式r'(.*)on(.*?) .*'

  • r表示后面的字符串是一个普通字符串(比如\n会译为\和n,而不是换行符)
  • ()符号包住的数据为要提取的数据,通常与.group()函数连用。
  • .匹配单个任意字符
  • *匹配前一个字符出现0次或无限次
  • ?匹配前一个字符出现0次或1次
  • (.*)提取的数据为str1字符串中on左边的所有字符,即Pyth
  • (.*?)提取的数据为str1中on右边,空格前面,即’s
  • .group(0)输出的是匹配正则表达式整体结果.
  • .group(1) 列出第一个括号匹配部分,.group(2) 列出第二个括号匹配部分

13、切片

若 a = range(100),以下哪些操作是合法的?

正确答案: A B C D 你的答案: A B C (错误)

A、a[-3]B、a[2:13]C、a[::3]D、a[2-3]

首先:a=range(100)的意思的a是一个1到100排序

A:a[-3]D:a[2-3]-->a[-1]

取a当中倒数第i个数–>a[-1]=99;a[-2]=98;a[-3]=97

所以A的输出结果是97,D的输出结果是99

B:a[2:13]取排列a第2到13个数,其结果是2到13的一个排列, 不包括13,前闭后开

C:a[::3]实际上是a[start:end:step]。根据a=range(100)可得start的默认值是1,end的默认值是100,step的默认值是1。

14、复数

关于Python中的复数,下列说法错误的是()

正确答案: C 你的答案: B (错误)

A、表是复数的语法是real + image jB、实部和虚部都是浮点数C、虚部必须后缀j,且必须小写D、方法conjugate返回复数的共轭复数

关于python中的复数:

1、虚数不能单独存在,它们总是和一个值为 0.0 的实数部分一起构成一个复数

2、复数由实数部分和虚数部分构成

3、表示虚数的语法:real+imagej

4、实数部分和虚数部分都是浮点数

5、虚数部分必须有后缀j或J

15、 切片不受内建类型的限制

对于以下代码,描述正确的是:

list = ['1', '2', '3', '4', '5']print (list[10:])

正确答案: D 你的答案: A (错误)

A、导致 IndexErrorB、输出['1', '2', '3', '4', '5']C、编译错误D、输出[]

D 切片不受内建类型的限制。如果出现了[index:],返回是[]

16、关键词return

关于return说法正确的是( )

正确答案: B D 你的答案: A B D (错误)

A、python函数中必须有returnB、return可以返回多个值C、return没有返回值时,函数自动返回NullD、执行到return时,程序将停止函数内return后面的语句

A. Python函数可以没有return,比如直接pass

C. return没有返回值时,函数自动返回None,Python没有Null。None是空对象,Null是空字符串!

  • return会跳出函数(遇到它,函数就结束)
  • break会跳出当前循环
  • continue 跳出当前循环并执行下一次

17、转义字符串

What gets printed?()

print (r"\nwoow")

正确答案: C 你的答案: C (正确)

A、new line then the string: woowB、the text exactly like this: r"\nwoow"C、the text like exactly like this: \nwoowD、the letter r and then newline then the text: woowE、the letter r then the text like this: nwoow

Python 中字符串的前导 r 代表原始字符串标识符,该字符串中的特殊符号不会被转义,适用于正则表达式中繁杂的特殊符号表示。

最典型的例子,如要输出字符串\n,由于反斜杠的转义,因此一般的输出语句为:

print("\\n")

这里的\\将被转义为\。而采用原始字符串输出时,则不会对字符串进行转义:

print (r"\n")

因此本题答案为 C,输出 \nwoow。注意前导标识符r 不会被输出,只起标记作用。

18、global

What gets printed?()

counter = 1 def doLotsOfStuff():     global counter    for i in (1, 2, 3):         counter += 1 doLotsOfStuff()print (counter)

正确答案: C 你的答案: C(正确)

A、1B、3C、4D、7

此题不难,主要是考察 global 的意义,即在局部作用域 doLotsOfStuff() 函数中,声明对全局作用域中的 counter 变量的引用,当内部作用域想修改外部变量时,需要使用global声明。

最后要注意第 5 行的坑,是 counter += 1 而不是 counter += i ,因此答案是 4 而不是 7,选答案 C。

19、标识符

下面哪个不是Python合法的标识符

正确答案: B 你的答案: B (正确)

A、int32B、40XLC、selfD、name

Python 中的标识符不能以数字开头,这也是普遍编程语言的通用规则:

1)第一个字符必须是字母表中字母或下划线 _ 。

2)标识符的其他的部分由字母、数字和下划线组成。
3)标识符对大小写敏感。
4)不可以是python中的关键字,如False、True、None、class等。

注意:self不是python中的关键字。类中参数self也可以用其他名称命名,但是为了规范和便于读者理解,推荐使用self。

20、socket

下列关于python socket操作叙述正确的是( )

正确答案: C D 你的答案: C (错误)

A、使用recvfrom()接收TCP数据B、使用getsockname()获取连接套接字的远程地址C、使用connect()初始化TCP服务器连接D、服务端使用listen()开始TCP监听

sk.recv(bufsize[,flag]):接受套接字的数据。数据以字符串形式返回,bufsize指定最多可以接收的数量。flag提供有关消息的其他信息,通常可以忽略。

sk.recvfrom(bufsize[.flag]):与recv()类似,但返回值是(data,address)。其中data是包含接收数据的字符串,address是发送数据的套接字地址。

sk.getsockname():返回套接字自己的地址。通常是一个元组(ipaddr,port)

sk.connect(address):连接到address处的套接字。一般,address的格式为元组(hostname,port),如果连接出错,返回socket.error错误。

sk.listen(backlog):开始监听传入连接。backlog指定在拒绝连接之前,可以挂起的最大连接数量。

如果你想跟博主建立亲密关系,可以关注博主,或者关注博主公众号“Python之王”,了解一个非本科程序员是如何成长的。

博主ID:润森,希望大家点赞、评论、收藏

转载地址:https://maoli.blog.csdn.net/article/details/108285064 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:2020 年最全 Python 面试题汇总 (二)
下一篇:六十八、快速幂算法、牛顿迭代法、累加数组+二分查找的变形

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年04月28日 06时12分48秒