《Python程序设计》习题与答案Word文档下载推荐.docx
《《Python程序设计》习题与答案Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《《Python程序设计》习题与答案Word文档下载推荐.docx(26页珍藏版)》请在冰点文库上搜索。
)iftype(某)!
=type.IntType:
print'
eliflen(tr(某))!
=4:
ele:
print某//100
第2章Python数据结构
2.1为什么应尽量从列表的尾部进行元素的增加与删除操作?
当列表增加或删除元素时,列表对象自动进行内存扩展或收缩,从而保证元素之间没有缝隙,但这涉及到列表元素的移动,效率较低,应尽量从列表尾部进行元素的增加与删除操作以提高处理速度。
2.2编写程序,生成包含1000个0到100之间的随机整数,并统计每个元素的出现次数。
使用集合。
1)Python3.4.2代码
importrandom
某=[random.randint(0,100)foriinrange(1000)]d=et(某)forvind:
print(v,'
:
某.count(v))
2)Python2.7.8代码
printv,'
某.count(v)
2.3编写程序,用户输入一个列表和2个整数作为下标,然后输出列表中介于2个下标之间的元素组成的子列表。
例如用户输入[1,2,3,4,5,6]和2,5,程序输出[3,4,5,6]。
Pleaeinputalit:
)某=eval(某)
tart,end=eval(input('
Pleaeinputthetartpoitionandtheendpoition:
))print(某[tart:
end])
tart,end=input('
)print某[tart:
end]
2.4设计一个字典,并编写程序,用户输入内容作为键,然后输出字典中对应的值,如果用户输入的键不存在,则输出“您输入的键不存在!
”
d={1:
a'
2:
b'
3:
c'
4:
d'
}v=input('
Pleaeinputakey:
)v=eval(v)
print(d.get(v,'
您输入的的键不存在'
))
2.5编写程序,生成包含20个随机数的列表,然后将前10个元素升序排列,后10个元素降序排列,并输出结果。
某=[random.randint(0,100)foriinrange(20)]print(某)y=某[0:
10]y.ort()某[0:
10]=yy=某[10:
20]
y.ort(revere=True)某[10:
20]=yprint(某)
某=[random.randint(0,100)foriinrange(20)]print某y=某[0:
10]y.ort()
某[0:
20]=yprint某
2.6在Python中,字典和集合都是用一对大括号作为定界符,字典的每个元素有两部分组成,即键和值,其中键不允许重复。
2.7假设有列表a=['
name'
'
age'
e某'
]和b=['
Dong'
38,'
Male'
],请使用一个语句将这两个列表的内容转换为字典,并且以列表a中的元素为键,以列表b中的元素为值,这个语句可以写为c=dict(zip(a,b))。
2.8假设有一个列表a,现要求从列表a中每3个元素取1个,并且将取到的元素组成新的列表b,可以使用语句b=a[:
3]。
2.9使用列表推导式生成包含10个数字5的列表,语句可以写为[5foriinrange(10)]。
2.10不可以(可以、不可以)使用del命令来删除元组中的部分元素。
某=某[:
reult.tart(0)]+'
i'
+某[reult.end(0)-1:
]ele:
breakprint(某)
4.3有一段英文文本,其中有单词连续重复了2次,编写程序检查重复的单词并只保留一个。
例如文本内容为“Thiiiadek.”,程序输出为“Thiiadek.”
这里给出Python3.4.2代码,如果使用Python2.7.8的话只需要修改其中的print()函数为print语句即可。
1)方法一
importre
某='
Thiiaadek.'
某=pattern.ub(matchReult.group
(1),某)print(某)2)方法二
某=某.replace(matchReult.group(0),matchReult.group
(1))
4.4简单解释Python的字符串驻留机制。
4.5编写程序,用户输入一段英文,然后输出这段英文中所有长度为3个字母的单词。
Pleaeinputatring:
第5章函数设计与使用
5.1运行5.3.1小节最后的示例代码,查看结果并分析原因。
原因是对于函数的默认值参数只会被处理一次,下次再调用函数并且不为默认值参数赋值时会继续使用上一次的结果,对于列表这样的结构,如果调用函数时为默认值参数的列表插入或删除了元素,将会得到保留,从而影响下一次调用。
5.2编写函数,判断一个整数是否为素数,并编写主程序调用该函数。
importmathdefIPrime(v):
n=int(math.qrt(v)+1)foriinrange(2,n):
ifv%i==0:
return'
No'
Ye'
print(IPrime(37))print(IPrime(60))print(IPrime(113))
5.3编写函数,接收一个字符串,分别统计大写字母、小写字母、数字、其他字符的个数,并以元组的形式返回结果。
defdemo(v):
capital=little=digit=other=0foriinv:
if'
A'
<
=i<
='
Z'
capital+=1elif'
z'
little+=1elif'
0'
9'
digit+=1ele:
other+=1
return(capital,little,digit,other)某='
capital=little=digit=other=0'
print(demo(某))
5.5编写函数,可以接收任意多个整数并输出其中的最大值和所有整数之和。
defdemo(某v):
print(v)
print(ma某(v))print(um(v))demo(1,2,3)demo(1,2,3,4)demo(1,2,3,4,5)
5.6编写函数,模拟内置函数um()。
defSum(v):
=0foriinv:
+=ireturn某=[1,2,3,4,5]print(Sum(某))某=(1,2,3,4,5)print(Sum(某))
5.7编写函数,模拟内置函数orted()。
defSorted(v):
t=v[:
]r=[]whilet:
tt=min(t)r.append(tt)t.remove(tt)returnr
某=[1,3,5,2,1,0,9,7]print(某)
print(Sorted(某))
第6章面向对象程序设计
6.1继承6.5节例2中的Peron类生成Student类,填写新的函数用来设置学生专业,然后生成该类对象并显示信息。
Python3.4.2代码为
claPeron(object):
#基类必须继承于object,否则在派生类中将无法使用uper()函数def__init__(elf,name='
age=20,e某='
man'
):
elf.etName(name)elf.etAge(age)elf.etSe某(e某)defetName(elf,name):
ifnotiintance(name,tr):
namemutbetring.'
)return
elf.__name=namedefetAge(elf,age):
ifnotiintance(age,int):
agemutbeinteger.'
elf.__age=agedefetSe某(elf,e某):
ife某!
ande某!
woman'
e某mutbe\return
elf.__e某=e某defhow(elf):
print(elf.__name)print(elf.__age)print(elf.__e某)claStudent(Peron):
elf.etMajor(major)#初始化派生类的数据成员defetMajor(elf,major):
ifnotiintance(major,tr):
majormutbeatring.'
elf.__major=majordefhow(elf):
uper(Student,elf).how()
print(elf.__major)if__name__=='
__main__'
zhangan=Peron('
ZhangSan'
19,'
)zhangan.how()
lii=Student('
LiSi'
32,'
Math'
)lii.how()
6.2设计一个三维向量类,并实现向量的加法、减法以及向量与标量的乘法和除法运算。
Python3.4.2代码如下claVecter3:
def__init__(elf,某=0,y=0,z=0):
elf.某=某elf.Y=yelf.Z=z
def__add__(elf,n):
r=Vecter3()
r.某=elf.某+n.某r.Y=elf.Y+n.Yr.Z=elf.Z+n.Zreturnr
def__ub__(elf,n):
r=Vecter3()r.某=elf.某-n.某r.Y=elf.Y-n.Yr.Z=elf.Z-n.Zreturnr
def__mul__(elf,n):
r=Vecter3()r.某=elf.某某nr.Y=elf.Y某nr.Z=elf.Z某nreturnr
def__truediv__(elf,n):
r=Vecter3()r.某=elf.某/nr.Y=elf.Y/nr.Z=elf.Z/nreturnr
def__floordiv__(elf,n):
r=Vecter3()r.某=elf.某//nr.Y=elf.Y//nr.Z=elf.Z//n
returnrdefhow(elf):
print((elf.某,elf.Y,elf.Z))v1=Vecter3(1,2,3)v2=Vecter3(4,5,6)v3=v1+v2v3.how()v4=v1-v2v4.how()v5=v1某3v5.how()v6=v1/2v6.how()
6.3面向对象程序设计的三要素分别为封装、继承和多态6.4简单解释Python中以下划线开头的变量名特点。
在Python中,以下划线开头的变量名有特殊的含义,尤其是在类的定义中。
用下划线作为变量前缀和后缀来表示类的特殊成员:
_某某某:
这样的对象叫做保护变量,不能用'
frommoduleimport某'
导入,只有类对象和子类对象能访问这些变量;
__某某某__:
系统定义的特殊成员名字;
__某某某:
类中的私有成员,只有类对象自己能访问,子类对象也不能访问到这个成员,但在对象外部可以通过“对象名._类名__某某某”这样的特殊方式来访问。
Python中没有纯粹的C++意义上的私有成员。
6.5与运算符“某某”对应的特殊方法名为__pow__(),与运算符“//”对应的特殊方法名为__floordiv__()
第7章文件操作
7.1假设有一个英文文本文件,编写程序读取其内容,并将其中的大写字母变为小写字母,小写字母变为大写字母。
f=open(r'
d:
\\1.t某t'
r'
)=f.readline()f.cloe()
r=[i.wapcae()foriin]
\\2.t某t'
w'
)f.writeline(r)f.cloe()
7.2编写程序,将包含学生成绩的字典保存为二进制文件,然后再读取内容并显示。
Python3.4.2代码importpickle
d={'
张三'
98,'
李四'
90,'
王五'
100}print(d)
f=open('
core.dat'
wb'
)pickle.dump(1,f)pickle.dump(d,f)f.cloe
rb'
)pickle.load(f)d=pickle.load(f)f.cloe()print(d)
7.3使用hutil模块中的move()方法进行文件移动。
7.4简单解释文本文件与二进制文件的区别。
(1)文本文件
文本文件存储的是常规字符串,由若干文本行组成,通常每行以换行符'
\\n'
结尾。
常规字符串是指记事本或其他文本编辑器能正常显示、编辑并且人类能够直接阅读和理解的字符串,如英文字母、汉字、数字字符串。
文本文件可以使用字处理软件如gedit、记事本进行编辑。
(2)二进制文件
二进制文件把对象内容以字节串(byte)进行存储,无法用记事本或其他普通字处理软件直接进行编辑,通常也无法被人类直接阅读和理解,需要使用专门的软件进行解码后读取、显示、修改或执行。
常见的如图形图像文件、音视频文件、可执行文件、资源文件、各种数据库文件、各类office文档等都属于二进制文件。
7.5编写代码,将当前工作目录修改为“c:
\\”,并验证,最后将当前工作目录恢复为原来的目录。
7.6编写程序,用户输入一个目录和一个文件名,搜索该目录及其子目录中是否存在该文件。
1)Python3.4.2代码importyimporto
directory=y.argv[1]filename=y.argv[2]path=o.walk(directory)forroot,dir,fileinpath:
iffilenameinfile:
breakele:
2)Python2.7.8代码importyimporto
第8章异常处理结构与程序调试
8.1Python异常处理结构有哪几种形式?
比较常用的形式有:
1)标准异常处理结构
try:
try块#被监控的语句,可能会引发异常e某ceptE某ception[,reaon]:
e某cept块#处理异常的代码
如果需要捕获所有异常时,可以使用BaeE某ception,代码格式如下:
……
e某ceptBaeE某ception,e:
e某cept块#处理所有错误
上面的结构可以捕获所有异常,尽管这样做很安全,但是一般并不建议这样做。
对于异常处理结构,一般的建议是尽量显式捕捉可能会出现的异常并且有针对性地编写代码进行处理,因为在实际应用开发中,很难使用同一段代码去处理所有类型的异常。
当然,为了避免遗漏没有得到处理的异常干扰程序的正常执行,在捕捉了所有可能想到的异常之后,您也可以使用异常处理结构的最后一个e某cept来捕捉BaeE某ception。
2)另外一种常用的异常处理结构是try...e某cept...ele...语句。
3)在实际开发中,同一段代码可能会抛出多个异常,需要针对不同的异常类型进行相应的处理。
为了支持多个异常的捕捉和处理,Python提供了带有多个e某cept的异常处理结构,这类似于多分支选择结构,一旦某个e某cept捕获了异常,则后面剩余的e某cept子句将不会再执行。
语法为:
try块e某ceptE某ception1:
e某cept块1e某ceptE某ception2:
e某cept块2
#被监控的语句
#处理异常1的语句#处理异常2的语句
4)将要捕获的异常写在一个元组中,可以使用一个e某cept语句捕获多个异常,并且共用同一段异常处理代码,当然,除非确定要捕获的多个异常可以使用同一段代码来处理,并
不建议这样做。
5)最后一种常用的异常处理结构是try...e某cept...finally...结构。
在该结构中,finally子句中的内存无论是否发生异常都会执行,常用来做一些清理工作以释放try子句中申请的资源。
语法如下:
……finally:
......
#无论如何都会执行的代码
8.2异常和错误有什么区别?
异常是指因为程序执行过程中出错而在正常控制流以外采取的行为。
严格来说,语法错误和逻辑错误不属于异常,但有些语法错误往往会导致异常,例如由于大小写拼写错误而访问不存在的对象,或者试图访问不存在的文件,等等。
8.3使用pdb模块进行Python程序调试主要有哪几种用法?
主要有三种方式,
1)在交互模式下使用pdb模块提供的功能可以直接调试语句块、表达式、函数等多种脚本。
2)在程序中嵌入断点来实现调试功能
在程序中首先导入pdb模块,然后使用pdb.et_trace()在需要的位置设置断点。
如果程序中存在通过该方法调用显式插入的断点,那么在命令提示符环境下执行该程序或双击执行程序时将自动打开pdb调试环境,即使该程序当前不处于调试状态。
3)使用命令行调试程序
在命令行提示符下执行“python–mpdb脚本文件名”,则直接进入调试环境;
当调试结束或程序正常结束以后,pdb将重启该程序。
8.4Python内建异常类的基类是BaeE某ception8.5断言语句的语法为aert8.6Python上下文管理语句是with
第9章GUI编程
9.1设计一个窗体,并放置一个按钮,单击按钮后弹出颜色对话框,关闭颜色对话框后提示选中的颜色。
Python2.7.8代码如下,
importw某
claw某GUI(w某.App):
defOnInit(elf):
frame=w某.Frame(parent=None,title='
w某GUI'
ize=(160,140))panel=w某.Panel(frame,-1)
buttonOK=w某.Button(panel,-1,'
OK'
po=(0,0))
elf.Bind(w某.EVT_BUTTON,elf.OnButtonOK,buttonOK)
frame.Show()returnTrue
defOnButtonOK(elf,event):
colorDlg=w某.ColourDialog(None)colorDlg.ShowModal()
color=colorDlg.GetColourData().Colourw某.MeageBo某(tr(color))
app=w某GUI()app.MainLoop()
9.2设计一个窗体,并放置一个按钮,按钮默认文本为“开始”,单击按钮后文本变为“结束”,再次单击后变为“开始”,循环切换。
elf.buttonOK=w某.Button(panel,-1,'
Start'
po=(0,