Python经典题库及答案.docx
《Python经典题库及答案.docx》由会员分享,可在线阅读,更多相关《Python经典题库及答案.docx(48页珍藏版)》请在冰豆网上搜索。
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)frommathimport*)
5、解释Python脚本程序的“name”变量及其作用?
(每个Python脚本在运行时都有一个“name”属性。
如果脚本作为模块被导入,则其“name”属性的值被自动设置为模块名;如果脚本独立运行,则其“name”属性值被自动设置为“main”。
利用“name”属性即可控制Python程序的运行方式。
)
6、为什么应尽量从列表的尾部进行元素的增加与删除操作?
(当列表增加或删除元素时,列表对象自动进行内存扩展或收缩,从而保证元素之间没有缝隙,但这涉及到列表元素的移动,效率较低,应尽量从列表尾部进行元素的增加与删除操作以提高处理速度。
)
7、分析逻辑运算符“or”的短路求值特性?
(假设有表达式“表达式1or表达式2”,如果表达式1的值等价于True,那么无论表达式2的值是什么,整个表达式的值总是等价于True。
因此,不需要再计算表达式2的值。
)
8、简单解释Python中短字符串驻留机制?
(对于短字符串,将其赋值给多个不同的对象时,内存中只有一个副本,多个对象共享改副本。
)
9、异常和错误有什么区别?
(异常是指因为程序执行过程中出错而在正常控制流以外采取的行为。
严格来说,语法错误和逻辑错误不属于异常,但有些语法错误往往会导致异常,例如由于大小写拼写错误而访问不存在的对象,或者试图访问不存在的文件,等等。
)
10、使用pdb模块进行Python程序调试主要有哪几种用法?
(1)在交互模式下使用pdb模块提供的功能可以直接调试语句块、表达式、函数等多种脚本。
2)在程序中嵌入断点来实现调试功能。
在程序中首先导入pdb模块,然后使用pdb.set_trace()在需要的位置设置断点。
如果程序中存在通过该方法调用显式插入的断点,那么在命令提示符环境下执行该程序或双击执行程序时将自动打开pdb调试环境,即使该程序当前不处于调试状态。
3)使用命令行调试程序。
在命令行提示符下执行“python–mpdb脚本文件名”,则直接进入调试环境;当调试结束或程序正常结束以后,pdb将重启该程序。
)
10、阅读下面的代码,并分析假设文件“D:
\test.txt”不存在的情况下两段代码可能发生的问题。
代码1:
>>>try:
fp=open(r'd:
\test.txt')print('Helloworld!
',file=fp)
finally:
fp.close()
代码2:
>>>try:
fp=open(r'd:
\test.txt','a+')print('Helloworld!
',file=fp)
finally:
fp.close()
答:
假设文件“D:
\test.txt”不存在,那么第一段代码会抛出异常,提示fp没有定义;第二段代码执行正常。
原因是第二段代码使用内置函数open()打开指定文件时如果不存在则会创建该文件,从而不会抛出异常。
11、下面的代码本意是把当前文件夹中所有html文件都改为htm文件,仔细阅读代码,简要说明可能存在的问题。
importos
file_list=os.listdir(".")forfilenameinfile_list:
pos=filename.rindex(".")
iffilename[pos+1:
]=="html":
newname=filename[:
pos+1]+"htm"os.rename(filename,newname)
print(filename+"更名为:
"+newname)
答:
对于字符串对象,如果要查找的子字符串不存在,则rindex()方法会抛出异常。
所以,如果
当前文件夹中有不包含圆点的文件名或者子文件夹名,上面的代码会抛出异常而崩溃。
12、
四、编程题
1、编写程序,在D盘根目录下创建一个文本文件test.txt,并向其中写入字符串helloworld。
答:
fp=open(r’D:
\test.txt’,‘a+’)print(‘helloworld’,file=fp)fp.close()
2、写出下面代码的优化版本,提高运行效率。
x=list(range(500))foriteminx:
t=5**5print(item+t)
答:
x=list(range(500))t=5**5
foriteminx:
print(item+t)
3、编写程序,生成一个包含20个随机整数的列表,然后对其中偶数下标的元素进行降序排列,奇数下标的元素不变。
(提示:
使用切片。
)
答:
importrandom
x=[random.randint(0,100)foriinrange(20)]print(x)
y=x[:
:
2]
y.sort(reverse=True)x[:
:
2]=y
print(x)
4、写出下面代码的执行结果。
defJoin(List,sep=None):
return(sepor',').join(List)print(Join(['a','b','c']))
print(Join(['a','b','c'],':
'))
答:
a,b,c
a:
b:
c
5、写出下面代码的运行结果。
defSum(a,b=3,c=5):
returnsum([a,b,c])print(Sum(a=8,c=2))print(Sum(8))
print(Sum(8,2))
答:
13
16
15
6、写出下面代码的运行结果。
defSum(*p):
returnsum(p)print(Sum(3,5,8))print(Sum(8))print(Sum(8,2,10))
答:
16
8
20
7、编写函数,判断一个数字是否为素数,是则返回字符串YES,否则返回字符串NO。
答:
importmathdefIsPrime(v):
n=int(math.sqrt(v)+1)foriinrange(2,n):
ifv%i==0:
return'No'
else:
return'Yes'
8、编写函数,模拟Python内置函数sorted()。
答:
defSorted(v):
t=v[:
:
]r=[]
whilet:
tt=min(t)r.append(tt)t.remove(tt)
returnr
9、编写程序,生成包含20个随机数的列表,然后将前10个元素升序排列,后10个元素降序排列,并输出结果。
答:
importrandom
x=[random.randint(0,100)foriinrange(20)]print(x)
y=x[0:
10]
y.sort()
x[0:
10]=yy=x[10:
20]
y.sort(reverse=True)
x[10:
20]=y
print(x)
10、编写程序,运行后用户输入4位整数作为年份,判断其是否为闰年。
如果年份能被400
整除,则为闰年;如果年份能被4整除但不能被100整除也为闰年。
答:
x=input('Pleaseinputanintegerof4digitsmeaningtheyear:
')x=eval(x)
ifx%400==0or(x%4==0andnotx%100==0):
print('Yes')
else:
print('No')
11、编写程序,实现分段函数计算,如下表所示。
x
y
x<0
0
0<=x<5
x
5<=x<10
3x-5
10<=x<20
0.5x-2
20<=x
0
答:
x=input('Pleaseinputx:
')x=eval(x)
ifx<0orx>=20:
print(0)
elif0<=x<5:
print(x)elif5<=x<10:
print(3*x-5)elif10<=x<20:
print(0.5*x-2)
12、阅读下面的程序,判断其是否可以正常运行,如果可以运行则写出执行结果,如果不能运行则写出理由。
classTest:
definit(self,value):
self.value=value
defvalue(self):
returnself.value
t=Test(3)t.value=5print(t.value)答:
不能运行。
程序中定义的是只读属性,不能修改属性的值。
13、下面代码的功能是,随机生成50个介于[1,20]之间的整数,然后统计每个整数出现频率。
请把缺少的代码补全。
importrandom
x=[random.(1,20)foriinrange()]r=dict()
foriinx:
r[i]=r.get(i,)+1fork,vinr.items():
print(k,v)
答:
分别填写randint、50、0
14、假设有Python程序文件demo.py,代码如下:
defmain():
ifname=='main':
print
(1)
else:
print
(2)
main()
将该程序文件直接运行时输出结果为,作为模块导入时得到结果-。
(1、2)
15、下面程序的执行结果是。
(1)s=0
foriinrange(1,101):
s+=i
else:
print
(1)
16、下面程序的执行结果是。
(1275)s=0
foriinrange(1,101):
s+=i
ifi==50:
print(s)break
else:
print
(1)
17、下面的程序是否能够正常执行,若不能,请解释原因;若能,请分析其执行结果。
fromrandomimportrandint
result=set()whileTrue:
result.add(randint(1,10))iflen(result)==20:
breakprint(result)
答:
无法正确执行,因为该程序的功能是从[1,10]区间中选择20个不同的随机整数,而该区
间并没有这么多整数,所以程序死循环。
18、下面的代码是否能够正确运行,若不能请解释原因;若能,请分析其执行结果。
>>>x=list(range(20))
>>>foriinrange(len(x)):
delx[i]
答:
无法正确执行,因为删除列表元素时会影响其他元素在列表中的索引,上面的代码会抛
出下标越界的异常。
19、阅读下面的代码,解释其功能。
>>>x=list(range(20))
>>>forindex,valueinenumerate(x):
ifvalue==3:
x[index]=5
答:
将列表x中值为3的元素修改为5。
20、阅读下面的代码,解释其功能。
>>>x=[range(3*i,3*i+5)foriinrange
(2)]
>>>x=list(map(list,x))
>>>x=list(map(list,zip(*x)))
答:
首先生成一个包含列表的列表,然后模拟矩阵转置。
21、阅读下面的代码,解释其功能。
>>>importstring
>>>x=string.ascii_letters+string.digits
>>>importrandom
>>>print(''.join(random.sample(x,10)))
答:
输出由英文字母大小写或数字组成的长度为10且不重复的随机字符串。
22、阅读下面的代码,分析其执行结果。
defdemo(*p):
returnsum(p)print(demo(1,2,3,4,5))
print(demo(1,2,3))
答:
输出结果为
15
6
23、阅读下面的代码,分析其执行结果。
defdemo(a,b,c=3,d=100):
returnsum((a,b,c,d))
print(demo(1,2,3,4))
print(demo(1,2,d=3))
答:
输出结果为
10
9
24、下面的代码输出结果为。
(3)defdemo():
x=5
x=3demo()print(x)
25、下面函数的功能为。
(将序列循环左移k位,得到新序列并返回)
defdemo(lst,k):
ifkreturnlst[k:
]+lst[:
k]
26、编写函数,求任意整数的二进制形式中最后连续0的个数。
defdemo(n):
b_n=bin(n)
index=b_n.rfind('1')+1returnlen(b_n[index:
])
27、有n个乒乓球运动员打淘汰赛,编写函数计算至少需要多少场比赛才能决出冠军,不允
许直接使用n-1。
defdemo(n):
ifn==1:
return0ifn==2:
return1
m,c=divmod(n,2)returnm+demo(c+m)
28、使用循环和列表推导式两种方法求解百钱买百鸡问题。
假设大鸡5元一只,中鸡3元一
只,小鸡1元三只,现有100元钱想买100只鸡,有多少种买法?
(1)循环
>>>forxinrange(21):
foryinrange(34):
z=100-x-y
ifz%3==0and5*x+3*y+z//3==100:
print(x,y,z)
02575
41878
81181
12484
(2)列表推导式
>>>[(x,y,100-x-y)forxinrange(21)foryinrange(34)if(100-x-y)%3==0and5*x+3*y+(100-x-y)//3==100]
[(0,25,75),(4,18,78),(8,11,81),(12,4,84)]
29、编写函数,给定任意字符串,找出其中只出现一次的字符,如果有多个这样的字符,就全部找出。
defsearchOne(s):
#创建空字典
d=dict()
#遍历字符串,并分别记录每个字符的出现次数
forchins:
#这里重点演示字典的get()方法
#如果这个字符出现过,加1
#如果这个字符第一次出现,0+1d[ch]=d.get(ch,0)+1
#列表推导式,查找所有只出现一次的字符
chs=[chforch,nind.items()ifn==1]
#返回最终结果,所有只出现一次的字符
returnchsprint(searchOne('abcdddca'))
30、阅读以下冒泡法排序代码,尝试写出优化代码,提高代码运行效率。
fromrandomimportrandint
defbubbleSort(lst):
length=len(lst)
foriinrange(0,length):
forjinrange(0,length-i-1):
#比较相邻两个元素大小,并根据需要进行交换iflst[j]>lst[j+1]:
lst[j],lst[j+1]=lst[j+1],lst[j]
lst=[randint(1,100)foriinrange(20)]print('Beforesort:
\n',lst)bubbleSort(lst)
print('Aftersort:
\n',lst)
参考答案:
fromrandomimportrandint
defbubbleSort(lst):
length=len(lst)
foriinrange(0,length):
flag=True
forjinrange(0,length-i-1):
#比较相邻两个元素大小,并根据需要进行交换iflst[j]>lst[j+1]:
lst[j],lst[j+1]=lst[j+1],lst[j]
flag=False
ifflag:
break
lst=[randint(1,100)foriinrange(20)]print('Beforesort:
\n',lst)bubbleSort(lst)
print('Aftersort:
\n',lst)
31、编写程序,用户输入带有千分位逗号的数字字符串,然后输出不带千分位逗号的数字字符串。
如果输入字符串'0'则退出程序。
参考答案:
defconvert(strNumber):
return''.join(strNumber.split(','))
whileTrue:
x=input('输入带有千分位逗号的数字:
')ifx=='0':
print('bye')break
print(convert(x))
32、编写程序,用户输入不带千分位逗号的数字字符串,然后输出带千分位逗号的数字字符串。
参考答案:
defconvert(strNumber):
#考虑小数的情况
temp=strNumber.split('.',1)
#整数部分
first=temp[0]
ifnotfirst.isdigit():
return'不是有效数字'
#小数部分
try:
second=temp[1]
ifnotsecond.isdigit():
return'不是有效数字'
except:
second=''
#增加千分位逗号
defnested(s):
result=[]length=len(s)
index=length%3ifindex!
=0:
result.append(s[:
index])foriinrange(index,length,3):
result.append(s[i:
i+3])return','.join(result)
first=nested(first)
#小数部分和整数部分的千分位不一样
ifsecond:
second=''.join(reversed(second))second=nested(second)
second=''.join(reversed(second))
#删除两侧可能的0和千分位逗号return'.'.join([first,second]).strip(',0')
#删除整数左侧可能的0和逗号
returnfirst.lstrip('0,')
#测试
whileTrue:
x=input('输入不带千分位逗号的数字:
')ifx=='0':
print('bye')break
print(convert(x))
二、填空题
1、Python安装扩展库常用的是工具。
(pip)
2、Python标准库math中用来计算平方根的函数是。
(sqrt)
3、Python程序文件扩展名主要有和两种,其中后者常用于GUI程序。
(py、pyw)
4、Python源代码程序编译后的文件扩展名为。
(pyc)
5、使用pip工具升级科学计算扩展库numpy的完整命令是。
(pipinstall
--upgradenumpy)
6、使用pip工具查看当前已安装的Python扩展库的完整命令是。
(piplist)
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
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、Python3.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程序文件编译为扩展名的文件。