本文共 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、bytes10、字符串格式化
下述字符串格式化语法正确的是?
正确答案: 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
。
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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!