最新Python经典题库及答案.docx
精品资料Python经典题库及答案.Python经典题库及答案一、简答题1、写出python导入模块的关键字((1)import,(2)from * import *)2、 写出 Python 运算符&的两种功能?(1)数字位运算;2)集合交集运算。)3、 简单解释 Python 基于值的自动内存管理方式?(Python 采用的是基于值得内存管理方式,在 Python 中可以为不同变量赋值为相同值,这个值在内存中只有一份,多个变量指向同一个内存地址;Python 具有自动内存管理功能,会自动跟踪内存中所有的值,对于没有任何变量指向的值,Python 自动将其删除。)4、 在 Python 中导入模块中的对象有哪几种方式?(1)import 模块名 as 别名;2)from 模块名 import 对象名 as 别名;3)from math import *)5、 解释 Python 脚本程序的“ name ”变量及其作用?(每个 Python 脚本在运行时都有一个“ name ”属性。如果脚本作为模块被导入,则其“ name ”属性的值被自动设置为模块名;如果脚本独立运行,则其“ name ”属性值被自动设置为“ main ”。利用“ name ”属性即可控制 Python 程序的运行方式。)6、 为什么应尽量从列表的尾部进行元素的增加与删除操作?(当列表增加或删除元素时,列表对象自动进行内存扩展或收缩,从而保证元素之间没有缝隙,但这涉及到列表元素的移动,效率较低,应尽量从列表尾部进行元素的增加与删除操作以提高处理速度。)7、 分析逻辑运算符“or”的短路求值特性?(假设有表达式“表达式 1 or 表达式 2”,如果表达式 1 的值等价于 True,那么无论表达式 2 的值是什么,整个表达式的值总是等价于 True。因此,不需要再计算表达式 2 的值。)8、 简单解释 Python 中短字符串驻留机制?(对于短字符串,将其赋值给多个不同的对象时,内存中只有一个副本,多个对象共享改副本。)9、 异常和错误有什么区别?(异常是指因为程序执行过程中出错而在正常控制流以外采取的行为。严格来说,语法错误和逻辑错误不属于异常,但有些语法错误往往会导致异常,例如由于大小写拼写错误而访问不存在的对象,或者试图访问不存在的文件,等等。)10、 使用 pdb 模块进行 Python 程序调试主要有哪几种用法?(1)在交互模式下使用 pdb 模块提供的功能可以直接调试语句块、表达式、函数等多种脚本。2)在程序中嵌入断点来实现调试功能。在程序中首先导入 pdb 模块,然后使用 pdb.set_trace()在需要的位置设置断点。如果程序中存在通过该方法调用显式插入的断点,那么在命令提示符环境下执行该程序或双击执行程序时将自动打开pdb 调试环境,即使该程序当前不处于调试状态。3)使用命令行调试程序。在命令行提示符下执行“python m pdb 脚本文件名”,则直接进入调试环境;当调试结束或程序正常结束以后,pdb 将重启该程序。)10、阅读下面的代码,并分析假设文件“D:test.txt”不存在的情况下两段代码可能发生的问题。代码 1:>>> try:fp = open(r'd:test.txt') print('Hello world!', file=fp)finally:fp.close()代码 2:>>> try:fp = open(r'd:test.txt', 'a+') print('Hello world!', file=fp)finally:fp.close()答:假设文件“D:test.txt”不存在,那么第一段代码会抛出异常,提示 fp 没有定义;第二段代码执行正常。原因是第二段代码使用内置函数 open()打开指定文件时如果不存在则会创建该文件,从而不会抛出异常。11、下面的代码本意是把当前文件夹中所有 html 文件都改为 htm 文件,仔细阅读代码,简要说明可能存在的问题。import osfile_list=os.listdir(".") for filename in file_list:pos = filename.rindex(".")if filenamepos+1: = "html":newname = filename:pos+1+"htm" os.rename(filename,newname)print(filename+"更名为:"+newname)答:对于字符串对象,如果要查找的子字符串不存在,则 rindex()方法会抛出异常。所以,如果当前文件夹中有不包含圆点的文件名或者子文件夹名,上面的代码会抛出异常而崩溃。12、四、编程题1、编写程序,在 D 盘根目录下创建一个文本文件 test.txt,并向其中写入字符串 hello world。答:fp = open(rD:test.txt, a+) print(hello world, file=fp) fp.close()2、写出下面代码的优化版本,提高运行效率。x = list(range(500) for item in x:t = 5*5 print(item+t)答:x = list(range(500) t = 5*5for item in x:print(item+t)3、编写程序,生成一个包含 20 个随机整数的列表,然后对其中偶数下标的元素进行降序排列,奇数下标的元素不变。(提示:使用切片。)答:import randomx = random.randint(0,100) for i in range(20) print(x)y = x:2y.sort(reverse=True) x:2 = yprint(x)4、写出下面代码的执行结果。 def Join(List, sep=None):return (sep or ',').join(List) print(Join('a', 'b', 'c')print(Join('a', 'b', 'c',':')答:a,b,ca:b:c5、写出下面代码的运行结果。 def Sum(a, b=3, c=5):return sum(a, b, c) print(Sum(a=8, c=2) print(Sum(8)print(Sum(8,2)答:1316156、写出下面代码的运行结果。 def Sum(*p):return sum(p) print(Sum(3, 5, 8) print(Sum(8) print(Sum(8, 2, 10)答:168207、编写函数,判断一个数字是否为素数,是则返回字符串 YES,否则返回字符串 NO。答:import math def IsPrime(v):n = int(math.sqrt(v)+1) for i in range(2,n):if v%i=0:return 'No'else:return 'Yes'8、编写函数,模拟 Python 内置函数 sorted()。答:def Sorted(v):t = v: r = while t:tt = min(t) r.append(tt) t.remove(tt)return r9、编写程序,生成包含 20 个随机数的列表,然后将前 10 个元素升序排列,后 10 个元素降序排列,并输出结果。答:import randomx = random.randint(0,100) for i in range(20) print(x)y = x0:10y.sort()x0:10 = y y = x10:20y.sort(reverse=True)x10:20 = yprint(x)10、编写程序,运行后用户输入 4 位整数作为年份,判断其是否为闰年。如果年份能被 400整除,则为闰年;如果年份能被 4 整除但不能被 100 整除也为闰年。答:x = input('Please input an integer of 4 digits meaning the year:') x = eval(x)if x%400=0 or (x%4=0 and not x%100=0): print('Yes')else:print('No')11、编写程序,实现分段函数计算,如下表所示。xyx<000<=x<5x5<=x<103x-510<=x<200.5x-220<=x0答:x = input('Please input x:') x = eval(x)if x<0 or x>=20: print(0)elif 0<=x<5:print(x) elif 5<=x<10:print(3*x-5) elif 10<=x<20:print(0.5*x-2)12、阅读下面的程序,判断其是否可以正常运行,如果可以运行则写出执行结果,如果不能运行则写出理由。class Test:def init (self, value): self. value = valuedef value(self):return self. valuet = Test(3) t.value = 5 print(t.value)答:不能运行。程序中定义的是只读属性,不能修改属性的值。13、下面代码的功能是,随机生成 50 个介于1,20之间的整数,然后统计每个整数出现频率。请把缺少的代码补全。import randomx = random. (1,20) for i in range( ) r = dict()for i in x:ri = r.get(i, )+1 for k, v in r.items():print(k, v)答:分别填写 randint、50、014、假设有 Python 程序文件 demo.py,代码如下: def main():if name = ' main ': print(1)else:print(2)main()将该程序文件直接运行时输出结果为 ,作为模块导入时得到结果 -。(1、2)15、下面程序的执行结果是 。(1) s = 0for i in range(1,101): s += ielse:print(1)16、下面程序的执行结果是 。(1275) s = 0for i in range(1,101): s += iif i = 50:print(s) breakelse:print(1)17、下面的程序是否能够正常执行,若不能,请解释原因;若能,请分析其执行结果。 from random import randintresult = set() while True:result.add(randint(1,10) if len(result)=20:break print(result)答:无法正确执行,因为该程序的功能是从1,10区间中选择 20 个不同的随机整数,而该区间并没有这么多整数,所以程序死循环。18、下面的代码是否能够正确运行,若不能请解释原因;若能,请分析其执行结果。>>> x = list(range(20)>>> for i in range(len(x): del xi答:无法正确执行,因为删除列表元素时会影响其他元素在列表中的索引,上面的代码会抛出下标越界的异常。19、阅读下面的代码,解释其功能。>>> x = list(range(20)>>> for index, value in enumerate(x): if value = 3:xindex = 5答:将列表 x 中值为 3 的元素修改为 5。20、阅读下面的代码,解释其功能。>>> x = range(3*i, 3*i+5) for i in range(2)>>> x = list(map(list, x)>>> x = list(map(list, zip(*x)答:首先生成一个包含列表的列表,然后模拟矩阵转置。21、阅读下面的代码,解释其功能。>>> import string>>> x = string.ascii_letters + string.digits>>> import random>>> print(''.join(random.sample(x, 10)答:输出由英文字母大小写或数字组成的长度为 10 且不重复的随机字符串。22、阅读下面的代码,分析其执行结果。 def demo(*p):return sum(p) print(demo(1,2,3,4,5)print(demo(1,2,3)答:输出结果为15623、阅读下面的代码,分析其执行结果。 def demo(a, b, c=3, d=100):return sum(a,b,c,d)print(demo(1, 2, 3, 4)print(demo(1, 2, d=3)答:输出结果为10924、下面的代码输出结果为 。(3) def demo():x = 5x = 3 demo() print(x)25、下面函数的功能为 。(将序列循环左移 k 位,得到新序列并返回)def demo(lst, k):if k<len(lst):return lstk:+lst:k26、编写函数,求任意整数的二进制形式中最后连续 0 的个数。def demo(n):b_n = bin(n)index = b_n.rfind('1') + 1 return len(b_nindex:)27、有 n 个乒乓球运动员打淘汰赛,编写函数计算至少需要多少场比赛才能决出冠军,不允许直接使用 n-1。 def demo(n):if n = 1:return 0 if n = 2:return 1m, c = divmod(n, 2) return m + demo(c+m)28、使用循环和列表推导式两种方法求解百钱买百鸡问题。假设大鸡 5 元一只,中鸡 3 元一只,小鸡 1 元三只,现有 100 元钱想买 100 只鸡,有多少种买法?(1)循环>>> for x in range(21): for y in range(34):z = 100-x-yif z%3=0 and 5*x + 3*y + z/3 = 100: print(x,y,z)0 25 754 18 788 11 8112 4 84(2)列表推导式>>> (x, y, 100-x-y) for x in range(21) for y in range(34) if (100-x-y)%3=0 and 5*x+3*y+(100-x-y)/3=100(0, 25, 75), (4, 18, 78), (8, 11, 81), (12, 4, 84)29、编写函数,给定任意字符串,找出其中只出现一次的字符,如果有多个这样的字符,就全部找出。def searchOne(s):# 创建空字典d = dict()# 遍历字符串,并分别记录每个字符的出现次数for ch in s:# 这里重点演示字典的 get()方法# 如果这个字符出现过,加 1# 如果这个字符第一次出现,0+1 dch = d.get(ch, 0) + 1# 列表推导式,查找所有只出现一次的字符chs = ch for ch, n in d.items() if n=1# 返回最终结果,所有只出现一次的字符return chs print(searchOne('abcdddca')30、阅读以下冒泡法排序代码,尝试写出优化代码,提高代码运行效率。from random import randintdef bubbleSort(lst): length = len(lst)for i in range(0, length):for j in range(0, length-i-1):#比较相邻两个元素大小,并根据需要进行交换 if lstj > lstj+1:lstj, lstj+1 = lstj+1, lstjlst = randint(1, 100) for i in range(20) print('Before sort:n', lst) bubbleSort(lst)print('After sort:n', lst)参考答案:from random import randintdef bubbleSort(lst): length = len(lst)for i in range(0, length):flag = Truefor j in range(0, length-i-1):#比较相邻两个元素大小,并根据需要进行交换 if lstj > lstj+1:lstj, lstj+1 = lstj+1, lstjflag = Falseif flag:breaklst = randint(1, 100) for i in range(20) print('Before sort:n', lst) bubbleSort(lst)print('After sort:n', lst)31、编写程序,用户输入带有千分位逗号的数字字符串,然后输出不带千分位逗号的数字字符串。如果输入字符串'0'则退出程序。参考答案:def convert(strNumber):return ''.join(strNumber.split(',')while True:x = input('输入带有千分位逗号的数字:') if x = '0':print('bye') breakprint(convert(x)32、编写程序,用户输入不带千分位逗号的数字字符串,然后输出带千分位逗号的数字字符串。参考答案:def convert(strNumber):# 考虑小数的情况temp = strNumber.split('.', 1)# 整数部分first = temp0if not first.isdigit():return '不是有效数字'# 小数部分try:second = temp1if not second.isdigit(): return '不是有效数字'except:second = ''# 增加千分位逗号def nested(s):result = length = len(s)index = length % 3 if index != 0:result.append(s:index) for i in range(index, length, 3):result.append(si:i+3) return ','.join(result)first = nested(first)# 小数部分和整数部分的千分位不一样if second:second = ''.join(reversed(second) second = nested(second)second = ''.join(reversed(second)# 删除两侧可能的 0 和千分位逗号 return '.'.join(first, second).strip(',0')# 删除整数左侧可能的 0 和逗号return first.lstrip('0,')# 测试while True:x = input('输入不带千分位逗号的数字:') if x = '0':print('bye') breakprint(convert(x)二、填空题1、 Python 安装扩展库常用的是 工具。(pip)2、 Python 标准库 math 中用来计算平方根的函数是 。(sqrt)3、 Python 程序文件扩展名主要有 和 两种,其中后者常用于 GUI 程序。(py、pyw)4、 Python 源代码程序编译后的文件扩展名为 。(pyc)5、 使用 pip 工具升级科学计算扩展库 numpy 的完整命令是 。(pip install-upgrade numpy)6、 使用 pip 工具查看当前已安装的 Python 扩展库的完整命令是 。(pip list)7、 在 IDLE 交互模式中浏览上一条语句的快捷键是 。(Alt+P)8、 在 Python 中 表示空类型。(None)9、 列表、元组、字符串是 Python 的 (有序?无序)序列。(有序)10、查看变量类型的 Python 内置函数是 。(type())11、查看变量内存地址的 Python 内置函数是 。(id())12、以 3 为实部 4 为虚部,Python 复数的表达形式为 或 。(3+4j、3+4J)13、Python 运算符中用来计算整商的是 。(/)14、Python 运算符中用来计算集合并集的是 。(|)15、使用运算符测试集合包含集合 A 是否为集合 B 的真子集的表达式可以写作 。(A<B)16、 命令既可以删除列表中的一个元素,也可以删除整个列表。(del)17、表达式 int('123', 16) 的值为 。(291)18、表达式 int('123', 8) 的值为 。(83)19、表达式 int('123') 的值为 。(123)20、表达式 int('101',2) 的值为 。(5)21、表达式 abs(-3) 的值为 。(3)22、Python 3.x 语句 print(1, 2, 3, sep=':') 的输出结果为 。(1:2:3)23、表达式 int(4*0.5) 的值为 。(2)24、Python 内置函数 可以返回列表、元组、字典、集合、字符串以及 range对象中元素个数。(len())25、Python 内置函数 用来返回序列中的最大元素。(max())26、Python 内置函数 用来返回序列中的最小元素。(min())27、Python 内置函数 用来返回数值型序列中所有元素之和。(sum())28、为了提高 Python 代码运行速度和进行适当的保密,可以将 Python 程序文件编译为扩展名的文件。(pyc)29、已知 x = 3,那么执行语句x += 6 之后,x 的值为 。(9)30、表达式 3 | 5 的值为 。(7)31、表达式 3 & 6 的值为 。(2)32、表达式 3 * 2 的值为 。(9)33、表达式 3 * 2 的值为 。(6)34、表达式 3<<2 的值为 。(12)35、表达式 65 >> 1 的值为 。(32)36、表达式 chr(ord('a')32) 的值为 。('A')37、表达式 chr(ord('a')-32) 的值为 。('A')38、表达式 abs(3+4j) 的值为 。(5.0)39、表达式 callable(int) 的值为 。(True)40、假设有 Python 程序文件 abc.py,其中只有一条语句 print( name ),那么直接运行该程序时得到的结果为。( main )41、表达式 16*0.5 的值为 。(4.0)42、表达式 type(3)的值为 。(set)43、表达式 isinstance('Hello world', str)的值为 。(True)44、表达式1, 2, 3*3 的执行结果为 。(1, 2, 3, 1, 2, 3, 1, 2, 3)45、list(map(str, 1, 2, 3)的执行结果为 。(1, 2, 3)46、语句 x = 3=3, 5 执行结束后,变量 x 的值为 。((True, 5)47、已知 x = 3,并且 id(x)的返回值为 496103280,那么执行语句 x += 6 之后,表达式 id(x) = 496103280 的值为 。(False)48、已知 x = 3,那么执行语句 x *= 6 之后,x 的值为 。(18)49、表达式3 in 1, 2, 3, 4的值为 。(False)50、列表对象的 sort()方法用来对列表元素进行原地排序,该函数返回值为 。(None)51、假设列表对象 aList 的值为3, 4, 5, 6, 7, 9, 11, 13, 15, 17,那么切片 aList3:7得到的值是 。(6, 7, 9, 11)52、使用列表推导式生成包含 10 个数字 5 的列表,语句可以写为 。(5 for i in range(10))53、假设有列表 a = 'name', 'age', 'sex'和 b = 'Dong', 38, 'Male',请使用一个语句将这两个列表的内容转换为字典,并且以列表 a 中的元素为“键”,以列表 b 中的元素为“值”,这个语句可以写为 。(c = dict(zip(a, b))54、任意长度的 Python 列表、元组和字符串中最后一个元素的下标为 。(-1)55、Python 语句 list(range(1,10,3)执行结果为 。(1, 4, 7)56、表达式 list(range(5) 的值为 。(0, 1, 2, 3, 4)57、已知 a = 1, 2, 3和 b = 1, 2, 4,那么 id(a1)=id(b1)的执行结果为 。(True)58、切片操作 list(range(6):2执行结果为 。(0, 2, 4)59、使用切片操作在列表对象 x 的开始处增加一个元素 3 的代码为 。(x0:0= 3)60、语句 sorted(1, 2, 3, reverse=True) = reversed(1, 2, 3) 执行结果为 。(False)61、表达式 sorted(111, 2, 33, key=lambda x: len(str(x) 的值为 。(2, 33, 111)62、表达式 sorted(111, 2, 33, key=lambda x: -len(str(x) 的值为 。(111, 33, 2)63、语句 x = (3,) 执行后 x 的值为 。((3,))64、语句 x = (3) 执行后 x 的值为 。(3)65、已知 x=3 和 y=5,执行语句 x, y = y, x 后 x 的值是 。(5)66、可以使用内置函数 查看包含当前作用域内所有全局变量和值的字典。(globals())67、可以使用内置函数 查看包含当前作用域内所有局部变量和值的字典。(locals()()68、字典中多个元素之间使用 分隔开,每个元素的“键”与“值”之间使用分隔开。(逗号、冒号)69、字典对象的 方法可以获取指定“键”对应的“值”,并且可以在指定“键”不存在的时候返回指定值,如果不指定则返回 None。(get())70、字典对象的 方法返回字典中的“键-值对”列表。(items())71、字典对象的 方法返回字典的“键”列表。(keys())72、字典对象的 方法返回字典的“值”列表。(values())73、已知 x = 1:2,那么执行语句 x2 = 3 之后,x 的值为 。(1: 2,2: 3)74、表达式 1, 2, 3, 4 - 3, 4, 5, 6的值为 。(1, 2)75、表达式 set(1, 1, 2, 3)的值为 。(1, 2, 3)76、使用列表推导式得到 100 以内所有能被 13 整除的数的代码可以写作 。(i for i in range(100) if i%13=0)77、已知 x = 3, 5, 7,那么表达式 x10:的值为 。()78、已知 x = 3, 5, 7,那么执行语句 xlen(x): = 1, 2之后,x 的值为 。(3, 5, 7, 1, 2)79、已 知x = 3, 7, 5 , 那 么 执 行 语 句x.sort(reverse=True) 之 后 , x 的 值 为 。(7, 5, 3)80、已知 x = 3, 7, 5,那么执行语句 x = x.sort(reverse=True)之后,x 的值为 。(None)81、已知 x = 1, 11, 111,那么执行语句 x.sort(key=lambda x: len(str(x), reverse=True)之后,x 的值为 。(111, 11, 1) 82、 表达式 list(zip(1,2, 3,4) 的值为 。((1, 3), (2, 4))83、已知 x = 1, 2, 3, 2, 3,执行语句 x.pop() 之后,x 的值为 。(1, 2, 3,2)84、表达式 list(map(list,zip(*1, 2, 3, 4, 5, 6) 的值为 。(1, 4, 2,5, 3, 6)85、表达式 x for x in 1,2,3,4,5 if x<3 的值为 。(1, 2)86、表达式 index for index, value in enumerate(3,5,7,3,7) if value = max(3,5,7,3,7)的值为 。(2, 4)87、已 知x = 3,5,3,7 , 那 么 表 达 式x.index(i) for i in x if i=3 的 值 为 。(0, 0)88、已知列表 x = 1, 2,那么表达式 list(enumerate(x) 的值为 。((0, 1), (1, 2))89、已知 vec = 1,2, 3,4 , 则表达式 col for row in vec for col in row 的值为 。(1, 2, 3, 4)90、已知 vec = 1,2, 3,4,则表达式 rowi for row in vec for i in range(len(vec0)的值为 。(1, 3, 2, 4)91、已知 x = list(range(10),则表达式 x-4: 的值为 。(6, 7, 8, 9)92、已知 x = 3, 5, 7,那么执行语句 x1: = 2之后,x 的值为 。(3,2)93、已知 x = 3, 5, 7,那么执行语句 x:3 = 2之后,x 的值为 。( 2)94、已知 x 为非空列表, 那么执行语句 y = x: 之后, id(x0) = id(y0) 的值为 。(True)95、已知 x = 1, 2, 3, 2, 3,执行语句 x.remove(2) 之后,x 的值为 。(1,3, 2, 3)96、表达式 len(i for i in range(10) 的值为 。(10)97、表达式 len(range(1,10) 的值为 。(9)98、表达式 range(10)-1 的值为 。(9)99、表达式 range(10,20)4 的值为 。(14)100、表达式 round(3.4) 的值为 。(3)101、表达式 round(3.7) 的值为 。(4)102、已知 x = (3), 那么表达式 x * 3 的值为 。(9)103、已知 x = (3,),那么表达式 x * 3 的值为 。((3, 3, 3))104、假设列表对象 x = 1, 1, 1,那么表达式 id(x0) = id(x2)的值为 。(True)105、已知列表 x = list(range(10),那么执行语句 del x:2之后,x 的值为 。(1, 3, 5, 7, 9)106、已知列表 x = 1, 2, 3, 4,那么执行语句 del x1 之后 x 的值为 。(1,3, 4)107、表达式 1 * 2 的值为 。(1, 1)108、表达式 1, 2 * 2 的值为 。(1, 2, 1, 2)109、已知列表 x = 1, 2, 3,那么执行语句 x.insert(1, 4) 只有,x 的值为 。(1, 4, 2, 3)110、已知列表 x = 1, 2, 3,那么执行语句 x.insert(0, 4) 只有,x 的值为 。(4, 1, 2, 3)111、已知列表 x = 1, 2, 3,那么执行语句 x.pop(0) 之后,x 的值为 。(2, 3)112、已 知x = 1 * 3 , 那 么 执 行 语 句x00 = 5 之 后 , 变 量 x 的 值 为 。(5, 5, 5