@Author:Runsen

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

文章目录

  • 1、Pythno逻辑运算符
  • 2、求100亿有多少素数
  • 3、深浅复制
  • 4、装饰器
  • 5、random模块
  • 6、元组的定义
  • 7、类定义
  • 8、函数对象定义
  • 9、字典的声明定义
  • 10、字符串格式化
  • 11、 内存管理
  • 12、正则表达式
  • 13、切片
  • 14、复数
  • 15、 切片不受内建类型的限制
  • 16、关键词return
  • 17、转义字符串
  • 18、global
  • 19、标识符
  • 20、socket

1、Pythno逻辑运算符

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

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

2、求100亿有多少素数

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

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

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

3、深浅复制

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

kvps = { '1' : 1, '2' : 2 }
theCopy = kvps.copy()
kvps['1'] = 5
sum = 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模块中的方法,同方法2
copy3 = 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 = 0c2 = 0for i in range(n):x = random.random()y = random.random()r1 = x * x + y * yr2 = (1 - x) * (1 - x) + (1 - y) * (1 - y)if r1 <= 1 and r2 <= 1:c1 += 1else:c2 += 1return   c1 / c2

random.random()生成0和1之间的随机浮点数float,上面代码是计算两个四分之一的圆的交集,最终得到的结果是
π−24−π\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,)))
<class 'tuple'>
>>> print(type((1)))
<class 'int'>

7、类定义

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

class A(object):passclass B(A):passb = B()A、isinstance(b, A) == True
B、isinstance(b, object) == True
C、issubclass(B, A) == True
D、issubclass(b, B) == True 答案

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

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

class A(object):pass
class B(A):pass
b = B()
print(isinstance(b,A))  # True
print(isinstance(b,B))  # True
print(type(b) is B) # True
print(type(b) is A) # False
print(issubclass(B,A)) # True
print(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、Python
B、Pyth
C、thon’s
D、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 j
B、实部和虚部都是浮点数
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、导致 IndexError
B、输出['1', '2', '3', '4', '5']
C、编译错误
D、输出[]

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

16、关键词return

关于return说法正确的是( )
正确答案: B D 你的答案: A B D (错误)

A、python函数中必须有return
B、return可以返回多个值
C、return没有返回值时,函数自动返回Null
D、执行到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: woow
B、the text exactly like this: r"\nwoow"
C、the text like exactly like this: \nwoow
D、the letter r and then newline then the text: woow
E、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 counterfor i in (1, 2, 3): counter += 1
doLotsOfStuff()
print (counter)

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

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

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

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

19、标识符

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

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

A、int32
B、40XL
C、self
D、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:润森,希望大家点赞、评论、收藏

2020 年最全 Python 面试题汇总 (一)相关推荐

  1. 2020 年最全 Python 面试题汇总 (四)

    @Author:Runsen 文章目录 前言 61.01背包 62.完全背包 63.多重背包 64.多重背包的二进制 65.混合背包 66.Vivio面试真题 67.二维费用的背包问题 68.买卖股票 ...

  2. 2020 年最全 Python 面试题汇总 (五)

    @Author:Runsen 文章目录 81.逆序对 82.手写一个栈 83.有效的扩号 84.扩号的生成 85.最长有效括号 86.比特位计数问题 87.判断给定的数是否为丑数 88.找出第 n 个 ...

  3. 2020 年最全 Python 面试题汇总 (二)

    @Author:Runsen 求职季在即,技巧千万条,硬实力才是关键,听说今年疫情大环境不好,更要好好准备才行.于是Runsen在牛客网,Leetcode,九章算法,不断地寻找面试真题,共计100题, ...

  4. python 面试题 2020_2020年最全python面试题

    1.Python里面如何实现tuple和list的转换? 答:直接使用tuple和list函数就行了,type()可以判断对象的类型 2.什么是lambda函数?它有什么好处? 答:lambda 表达 ...

  5. python面试题及答案2020_2020年python面试题汇总(最新)

    随着近些年机器学习.云计算等技术的发展,Python的职位需求越来越高.那么提前掌握最新的python面试题技巧,将有助于在求职中取得成功:同时gxlcms作为知名的编程学习网站,有着最新最热门的py ...

  6. python面试题汇总(史上最全)

    python面试题 ✅作者简介:大家好我是编程ID

  7. 赢在微点答案专区英语_免费领取 | 2020广东省中考全真模拟试题语文、数学、英语、化学、物理、历史、道德与法治、生物、地理共67套,可下载打印,...

    2020年广东省中考命题科目.命题依据.考试方式和考试时长.各科卷面分值.预设难度和试卷结构. 点击图片可以放大 2020年中考渐渐临近,广大学子的备考复习也愈发紧张.这个时候,一套优秀的模拟试卷会给 ...

  8. java2019 数据结构算法面试题_GitHub - sjyw/java-interview: 史上最全Java面试题汇总与解析(505道):2019最新版...

    Java 面试全解析 知识树 课程亮点 500道 Java 常见面试题 + 14万字核心知识解析 丰富的 Java 技术栈:基础和框架,线程池和锁优化,SpringBoot 和分布式消息队列,数据结构 ...

  9. python期末试题汇总

    一.选择题(每题2分,共70分) 1.下列哪个语句在Python中是非法的?( B ) A.x = y = z = 1   B.x = (y = z + 1) C.x, y = y, x D.x  + ...

最新文章

  1. 强度光照模块rimg02 BH1750光度传感器模块
  2. python爬虫和信息收集_python爬站长之家写一个信息搜集器
  3. 《犯罪心理学》读书笔记(part3)--影响犯罪心理形成发展的外部因素
  4. html网页原理,html运行原理
  5. 数据库设计的核心原则 外键的设计 提高插入数据速度
  6. python 属性描述符_Python属性描述符(二)
  7. 提高tomcat的并发能力
  8. Java微信公众号开发梳理
  9. 马云曾卖鲜花,柳传志卖冰箱!摆摊吧,程序员!
  10. python获取文件修改时间与创建时间
  11. 计算机等级二级c语言考试真题,历年计算机等级考试二级C语言上机真题及答案..pdf...
  12. 关于对接网易云即时通信IM的心得
  13. 君正X1000芯片性能和处理器介绍
  14. vue中对鼠标划过事件处理方式
  15. Oracle Redo log 状态及工作原理解析
  16. Windows Server 2022 英文版、简体中文版下载 (updated Dec 2021)(2022 年 1 月发布)
  17. 百度地图、高德地图的数据从哪里得到的?[声明我只是此文章的搬运工]
  18. Web安全漏洞扫描神器-AWVS下载、安装及使用教程
  19. 庆祝自己喜提ROG冰刃3新锐!
  20. Java 小明同学最近开发了一个网站,在用户注册账户的时候,需要设置账户的密码

热门文章

  1. ESD二极管 DW15D3HP-S 封装SOD-323F
  2. java计算二叉树的节点最小值_java计算二叉树的高度以及叶节点个数
  3. mfc 子窗体任何消息都不触发_winform让窗体一直显示在桌面上以及FindWindow
  4. python顺序结构实验设计_实验二 顺序结构程序设计(验证性实验)
  5. 【CSS3】table的css属性
  6. 20170819 - 今日技能封装 - A
  7. 谷歌加载web workers问题
  8. jquery中prop()方法和attr()方法的区别浅析
  9. codeforces 719C (复杂模拟-四舍五入-贪心)
  10. Android应用开发之(通过ClipboardManager, ClipData进行复制粘贴)