Python经典题库及答案.docx

上传人:b****7 文档编号:25395484 上传时间:2023-06-08 格式:DOCX 页数:64 大小:60.52KB
下载 相关 举报
Python经典题库及答案.docx_第1页
第1页 / 共64页
Python经典题库及答案.docx_第2页
第2页 / 共64页
Python经典题库及答案.docx_第3页
第3页 / 共64页
Python经典题库及答案.docx_第4页
第4页 / 共64页
Python经典题库及答案.docx_第5页
第5页 / 共64页
点击查看更多>>
下载资源
资源描述

Python经典题库及答案.docx

《Python经典题库及答案.docx》由会员分享,可在线阅读,更多相关《Python经典题库及答案.docx(64页珍藏版)》请在冰豆网上搜索。

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)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):

ifk

returnlst[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程序文件编译为扩展名的文件。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1