《《Python程序设计方案》习题与答案.docx》由会员分享,可在线阅读,更多相关《《Python程序设计方案》习题与答案.docx(47页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、认真整理可以编辑!放心下载!Python 程序设计习题与参考答案第 1 章根底学问1.1简洁说明如何选择正确的Python版本。答:在选择Python的时候,确定要先考虑清楚自己学习Python的目的是什么, 打算做哪方面的开发, 有哪些扩展库可用, 这些扩展库最高支持哪个版本的Python , 是 Python2.x 还 是 Python3.x , 最 高 支 持 到Python2.7.6 还是Python2.7.9 。这些问题都确定以后,再做出自己的选择,这样才能事半功倍,而不至于把大量时间铺张在 Python的反复安装和卸载上。同时还应当留意,当更的 Python版本推出之后,不要急于更
2、,而是应当等确定自己所必需使用的扩展库也推出了较版本之后再进展更。尽管如此,Python3 到底是大势所趋,假设您临时还没想到要做什么行业领域的应用开发,或者仅仅是为了尝试一种的、好玩的语言,那么请毫不迟疑地选择Python3.x 系列的最高版本目前是Python3.4.3 。1.2为什么说Python承受的是基于值的内存治理模式? 答:Python承受的是基于值的内存治理方式,假设为不同变量赋值一样值,则在内存中只有一份该值,多个变量指向同一块内存地址,例如下面的代码。x=3id(x)10417624y=3id(y)10417624y=5id(y)10417600id(x)104176241
3、.3在Python中导入模块中的对象有哪几种方式? 答:常用的有三种方式,分别为第1l import模块名as别名l from模块名import对象名as别名l frommathimport*1.4使用pip命令安装numpy、scipy模块。答:在命令提示符环境下执行下面的命令:pipinstallnumpypipinstallscipy1.5编写程序,用户输入一个三位以上的整数,输出其百位以上的数字。例如用户输入1234,则程序输出12。提示:使用整除运算。答:1Python3.4.2代码:x=input(Pleaseinputanintegerofmorethan3digits:)try
4、:x=int(x)x=x/100ifx=0:print(Youmustinputanintegerofmorethan3digits.)else:print(x)exceptBaseException:print(Youmustinputaninteger.)2Python2.7.8代码:importtypesx=input(Pleaseinputanintegerofmorethan3digits:)iftype(x)!=types.IntType:printYoumustinputaninteger.eliflen(str(x)!=4:printYoumustinputanintegero
5、fmorethan3digits.else:printx/100第2第2章Python数据构造2.1 为什么应尽量从列表的尾部进展元素的增加与删除操作? 答:当列表增加或删除元素时,列表对象自动进展内存扩展或收缩,从而保证元素之间没有缝隙,但这涉及到列表元素的移动,效率较低,应尽量从列表尾部进展元素的增加与删除操作以提高处理速度。2.2 编写程序,生成包含1000个0到100之间的随机整数,并统计每个元素的消灭次数。提示:使用集合。答:1Python3.4.2代码importrandomx=random.randint(0,100)foriinrange(1000)d=set(x)forvin
6、d:print(v,:,x.count(v)2Python2.7.8代码importrandomx=random.randint(0,100)foriinrange(1000)d=set(x)forvind:printv,:,x.count(v)2.3 编写程序,用户输入一个列表和2个整数作为下标,然后输出列表中介于2个下标之间的元素组成的子列表。例如用户输入 1,2,3,4,5,6和2,5,程序输出3,4,5,6。答:1Python3.4.2代码x=input(Pleaseinputalist:)x=eval(x)start,end=eval(input(Pleaseinputthestar
7、tpositionandtheendposition:)第3print(xstart:end)2Python2.7.8代码x=input(Pleaseinputalist:)start,end=input(Pleaseinputthestartpositionandtheendposition:)printxstart:end2.4设计一个字典,并编写程序,用户输入内容作为键,然后输出字典中对应的值,假设用户输入的键不存在,则输出“您输入的键不存在!”答:1Python3.4.2代码d=1:a,2:b,3:c,4:dv=input(Pleaseinputakey:)v=eval(v)print
8、(d.get(v,您输入的的键不存在)2Python2.7.8代码d=1:a,2:b,3:c,4:dv=input(Pleaseinputakey:)print(d.get(v,您输入的的键不存在)2.5编写程序,生成包含20个随机数的列表,然后将前 10个元素升序排列, 后10个元素降序排列,并输出结果。答:1Python3.4.2代码importrandomx=random.randint(0,100)foriinrange(20)print(x)y=x0:10y.sort()x0:10=yy=x10:20y.sort(reverse=True)x10:20=yprint(x)2Pytho
9、n2.7.8代码第4importrandomx=random.randint(0,100)foriinrange(20)printxy=x0:10y.sort()x0:10=yy=x10:20y.sort(reverse=True)x10:20=yprintx2.6在Python中,字典和集合都是用一对大括号作为定界符, 字典的每个元素有两局部组成,即键和值,其中键不允许重复。2.7假 设 有 列 表 a=name,age,sex和b=Dong,38,Male,请使用一个语句将这两个列表的内容转换为字典, 并且以列表a 中的元素为键, 以列表b 中的元素为值, 这个语句可以写为c=dict(z
10、ip(a,b)。2.8假设有一个列表a,现要求从列表a中每3个元素取1个,并且将取到的元素组成的列表b,可以使用语句b=a:3。2.9使用列表推导式 生成包含 10 个数字5 的列表, 语 句可以写为5foriinrange(10)。2.10不行以可以、不行以使用del命令来删除元组中的局部元素。第3章 选择构造与循环构造3.1分析规律运算符“or”的短路求值特性。答:假设有表达式“表达式 1or表达式2”,假设表达式1的值等价于True,那么无论表达式2的值是什么,整个表达式的值总是等价于True。因此,不需要再计算表达式2的值。3.2编写程序,运行后用户输入 4位整数作为年份,推断其是否为
11、闰年。假设年份能被400整除,则为闰年;假设年份能被4整除但不能被100整除也为闰年。第5答:1Python3.4.2代码x=input(Pleaseinputanintegerof4digitsmeaningtheyear:)x=eval(x)ifx%400=0or(x%4=0andnotx%100=0):print(Yes)else:print(No)2Python2.7.8代码x=input(Pleaseinputanintegerof4digitsmeaningtheyear:)ifx%400=0or(x%4=0andnotx%100=0):printYeselse:printNo3.
12、3编写程序,生成一个包含 50个随机整数的列表,然后删除其中全部奇数。提示:从后向前删。 答:1Python3.4.2代码importrandomx=random.randint(0,100)foriinrange(50)print(x)i=len(x)-1whilei=0:ifxi%2=1:delxii-=1print(x)2Python2.7.8代码把上面的代码中第三行和最终一行改为printx即可。34编写程序,生成一个包含20个随机整数的列表,然后对其中偶数下标的元素进展降序排列,奇数下标的元素不变。提示:使用切片。第6答:1Python3.4.2代码importrandomx=ran
13、dom.randint(0,100)foriinrange(20)print(x)y=x:2y.sort(reverse=True)x:2=yprint(x)2Python2.7.8代码把上面的代码中第三行和最终一行改为printx即可。35编写程序,用户从键盘输入小于 1000的整数,对其进展因式分解。例如,10=25,60=2235。答:1Python3.4.2代码x=input(Pleaseinputanintegerlessthan1000:)x=eval(x)t=xi=2result=whileTrue:ift=1:breakift%i=0:result.append(i)t=t/i
14、else:i+=1Printx,=,*.join(map(str,result)2Python2.7.8代码x=input(Pleaseinputanintegerlessthan1000:)t=xi=2result=第7whileTrue:ift=1:breakift%i=0:result.append(i)t=t/ielse:i+=1printx,=,*.join(map(str,result)3.6编写程序,至少使用2种不同的方法计算100以内全部奇数的和。答: Python3.4.2代码如下,假设使用 Python2.7.8只需要把其中的print()函数改为print语句即可。x=i
15、foriinrange(1,100)ifi%2=1print(sum(x)print(sum(range(1,100):2)3.7编写程序,实现分段函数计算,如下表所示。xyx000=x5x5=x13x-5010=x200.5x-220=x0答: Python3.4.2代码如下,假设使用 Python2.7.8只需要把其中的print()函数改为print语句即可。x=input(Pleaseinputx:)x=eval(x)ifx=20:print(0)elif0=x5:print(x)elif5=x10:第8print(3*x-5)elif10=x20:print(0.5*x-2)第9第4
16、章 字符串与正则表达式4.1假设有一段英文,其中有单独的字母“I”误写为“i”,请编写程序进展订正。答:这里给出 Python3.4.2代码,假设使用 Python2.7.8的话只需要修改其中的print()函数为print语句即可。1不使用正则表达式x=iamateacher,iamman,andiam38yearsold.Iamnotabusinessman.x=x.replace(i,I)x=x.replace(i,I)print(x)2使用正则表达式x=iamateacher,iamman,andiam38yearsold.Iamnotabusinessman.importrepatt
17、ern=pile(r(?:w|b)i(?:w)whileTrue:result=pattern.search(x)ifresult:ifresult.start(0)!=0:x=x:result.start(0)+1+I+xresult.end(0)-1:else:x=x:result.start(0)+I+xresult.end(0)-1:else:breakprint(x)4.2假设有一段英文,其中有单词中间的字母“ i”误写为“ I”,请编写程序进展订正。答:这里给出 Python3.4.2代码,假设使用 Python2.7.8的话只需要修改其中的print()函数为print语句即可。
18、importrex=Iamateacher,Iamman,andIam38yearsold.IamnotabusInessman.第10print(x)pattern=pile(r(?:w)I(?:w)whileTrue:result=pattern.search(x)ifresult:ifresult.start(0)!=0:x=x:result.start(0)+1+i+xresult.end(0)-1:else:x=x:result.start(0)+i+xresult.end(0)-1:else:breakprint(x)4.3 有一段英文文本,其中有单词连续重复了 2次,编写程序检查
19、重复的单词并只保存一个。例如文本内容为“ Thisisisadesk.”,程 序输出为“Thisisadesk.”答:这里给出 Python3.4.2代码,假设使用 Python2.7.8的话只需要修改其中的print()函数为print语句即可。1方法一importrex=Thisisaadesk.pattern=pile(rb(w+)(s+1)1,b)matchResult=pattern.search(x)x=pattern.sub(matchResult.group(1),x)print(x)2方法二x=Thisisaadesk.pattern=pile(r(?Pbw+b)s(?P=f
20、)matchResult=pattern.search(x)x=x.replace(matchResult.group(0),matchResult.group(1)4.4简洁解释Python的字符串驻留机制。答:Python支持字符串驻留机制,即:对于短字符串,将其赋值给多个不同的对象时,内存中只有一个副本,多个对象共享该副本。这一点不适用于长字符串,即长字符串第11不遵守驻留机制,下面的代码演示了短字符串和长字符串在这方面的区分。a=1234b=1234id(a)=id(b)Truea=1234*50b=1234*50id(a)=id(b)False4.5编写程序,用户输入一段英文,然后输
21、出这段英文中全部长度为3个字母的单词。答:这里给出 Python3.4.2代码,假设使用 Python2.7.8的话只需要修改其中的print()函数为print语句即可。importrex=input(Pleaseinputastring:)pattern=pile(rba-zA-Z3b)print(pattern.findall(x)第12第5章 函数设计与使用5.1 运行5.3.1小节最终的例如代码,查看结果并分析缘由。答:缘由是对于函数的默认值参数只会被处理一次,下次再调用函数并且不为默认值参数赋值时会连续使用上一次的结果,对于列表这样的构造,假设调用函数时为默认值参数的列表插入或删除
22、了元素,将会得到保存,从而影响下一次调用。5.2 编写函数,推断一个整数是否为素数,并编写主程序调用该函数。答:这里给出 Python3.4.2代码,假设使用 Python2.7.8的话只需要修改其中的print()函数为print语句即可。importmathdefIsPrime(v):n=int(math.sqrt(v)+1)foriinrange(2,n):ifv%i=0:returnNoelse:returnYesprint(IsPrime(37)print(IsPrime(60)print(IsPrime(113)5.3 编写函数,接收一个字符串,分别统计大写字母、小写字母、数字、其
23、他字符的个数,并以元组的形式返回结果。答:这里给出 Python3.4.2代码,假设使用 Python2.7.8的话只需要修改其中的print()函数为print语句即可。defdemo(v):capital=little=digit=other=0foriinv:ifA=i=Z:capital+=1elifa=i=z:little+=1elif0=idefdemo():a=3printaa=5demo()3a55.5编写函数,可以接收任意多个整数并输出其中的最大值和全部整数之和。 答:这里给出 Python3.4.2代码,假设使用 Python2.7.8的话只需要修改其中的print()函数
24、为print语句即可。defdemo(*v):print(v)print(max(v)print(sum(v)demo(1,2,3)demo(1,2,3,4)demo(1,2,3,4,5)5.6编写函数,模拟内置函数sum()。答:这里给出 Python3.4.2代码,假设使用 Python2.7.8的话只需要修改其中的print()函数为print语句即可。defSum(v):s=0foriinv:s+=ireturnsx=1,2,3,4,5print(Sum(x)x=(1,2,3,4,5)print(Sum(x)第145.7编写函数,模拟内置函数sorted()。答:这里给出 Python
25、3.4.2代码,假设使用 Python2.7.8的话只需要修改其中的print()函数为print语句即可。defSorted(v):t=v:r=whilet:tt=min(t)r.append(tt)t.remove(tt)returnrx=1,3,5,2,1,0,9,7print(x)print(Sorted(x)第15第6章 面对对象程序设计6.1继承6.5节例2中的Person类生成Student类,填写的函数用来设置学生专业,然后生成该类对象并显示信息。答:Python3.4.2代码为importtypesclassPerson(object):#基类必需继承于 object,否则在
26、派生类中将无法使用super()函数def_init_(self,name=,age=20,sex=man):self.setName(name)self.setAge(age)self.setSex(sex)defsetName(self,name):ifnotisinstance(name,str):print(namemustbestring.)returnself._name=namedefsetAge(self,age):ifnotisinstance(age,int):print(agemustbeinteger.)returnself._age=agedefsetSex(self
27、,sex):ifsex!=manandsex!=woman:print(sexmustbemanorwoman)returnself._sex=sexdefshow(self):print(self._name)print(self._age)print(self._sex)classStudent(Person):def_init_(self,name=,age=30,sex=man,major=Computer):#调用基类构造方法初始化基类的私有数据成员super(Student,self)._init_(name,age,sex)self.setMajor(major)#初始化派生类的
28、数第16据成员defsetMajor(self,major):ifnotisinstance(major,str):print(majormustbeastring.)returnself._major=majordefshow(self):super(Student,self).show()print(self._major)if_name_=_main_:zhangsan=Person(ZhangSan,19,man)zhangsan.show()lisi=Student(LiSi,32,man,Math)lisi.show()6.2设计一个三维向量类,并实现向量的加法、减法以及向量与标量
29、的乘法和除法运算。答:Python3.4.2代码如下classVecter3:def_init_(self,x=0,y=0,z=0):self.X=xself.Y=yself.Z=zdef_add_(self,n):r=Vecter3()r.X=self.X+n.Xr.Y=self.Y+n.Yr.Z=self.Z+n.Zreturnrdef_sub_(self,n):r=Vecter3()r.X=self.X-n.Xr.Y=self.Y-n.Yr.Z=self.Z-n.Zreturnrdef_mul_(self,n):r=Vecter3()r.X=self.X*nr.Y=self.Y*nr.Z
30、=self.Z*n第17returnrdef_truediv_(self,n):r=Vecter3()r.X=self.X/nr.Y=self.Y/nr.Z=self.Z/nreturnrdef_floordiv_(self,n):r=Vecter3()r.X=self.X/nr.Y=self.Y/nr.Z=self.Z/nreturnrdefshow(self):print(self.X,self.Y,self.Z)v1=Vecter3(1,2,3)v2=Vecter3(4,5,6)v3=v1+v2v3.show()v4=v1-v2v4.show()v5=v1*3v5.show()v6=v1
31、/2v6.show()6.3面对对象程序设计的三要素分别为封装、继承和多态。6.4简洁解释Python中以下划线开头的变量名特点。答:在Python中,以下划线开头的变量名有特别的含义,尤其是在类的定义中。用下划线作为变量前缀和后缀来表示类的特别成员:l _xxx : 这 样 的 对 象 叫 做 保 护 变 量 , 不 能 用frommoduleimport*导入,只有类对象和子类对象能访问这些变量;l _xxx_:系统定义的特别成员名字;l _xxx:类中的私有成员,只有类对象自己能访问,子类对象也不能访问到这个成员,但在对象外部可以通过“对象名 ._类名_xxx”这样的特别方式来访问。Py
32、thon中没有纯粹的C+意义上的私有成员。6.5 与运算符“ * ” 对应的特别方法名为_pow_() , 与运算符第18“/”对应的特别方法名为_floordiv_()。第19第7章 文件操作7.1假设有一个英文文本文件,编写程序读取其内容,并将其中的大写字母变为小写字母,小写字母变为大写字母。答:f=open(rd:1.txt,r)s=f.readlines()f.close()r=i.swapcase()foriinsf=open(rd:2.txt,w)f.writelines(r)f.close()7.2编写程序,将包含学生成绩的字典保存为二进制文件,然后再读取内容并显示。答:Pyth
33、on3.4.2代码importpickled=张三:98,李四:90,王五:100print(d)f=open(score.dat,wb)pickle.dump(1,f)pickle.dump(d,f)f.closef=open(score.dat,rb)pickle.load(f)d=pickle.load(f)f.close()print(d)7.3使用shutil模块中的move()方法进展文件移动。答:importshutilshutil.move(rd:1.txt,re:1.txt)e:1.txt7.4简洁解释文本文件与二进制文件的区分。第20答:1文本文件文本文件存储的是常规字符串
34、,由假设干文本行组成,通常每行以换行符n结尾。常规字符串是指记事本或其他文本编辑器能正常显示、编辑并且人类能够直接阅读和理解的 字符串,如英文字母、汉字、数字字符串。文本文件可以使用字处理软件如 gedit、记事本进展编辑。2二进制文件二进制文件把对象内容以字节串(bytes)进展存储,无法用记事本或其他一般字处理软件直接进展编辑,通常也无法被人类直接阅读和理解,需要使用特地的软件进展解 码后读取、显示、修改或执行。常见的如图形图像文件、音视频文件、可执行文件、资源 文件、各种数据库文件、各类office文档等都属于二进制文件。7.5 编写代码,将当前工作名目修改为“ c:”,并验证,最终将当
35、前工作名目恢复为原来的名目。答:importosos.getcwd()C:Python34os.chdir(rc:)os.getcwd()c:os.chdir(rc:Python34)os.getcwd()c:Python347.6编写程序,用户输入一个名目和一个文件名,搜寻该名目及其子名目中是否存在该文件。答:1Python3.4.2代码importsysimportosdirectory=sys.argv1filename=sys.argv2paths=os.walk(directory)forroot,dirs,filesinpaths:第21iffilenameinfiles:prin
36、t(Yes)breakelse:print(No)2Python2.7.8代码importsysimportosdirectory=sys.argv1filename=sys.argv2paths=os.walk(directory)forroot,dirs,filesinpaths:iffilenameinfiles:printYesbreakelse:printNo第22第8章 特别处理构造与程序调试8.1Python特别处理构造有哪几种形式? 答:比较常用的形式有:1标准特别处理构造try:try块#被监控的语句,可能会引发特别exceptException,reason:except块
37、#处理特别的代码假设需要捕获全部特别时,可以使用BaseException,代码格式如下:try:exceptBaseException,e:except块#处理全部错误上面的构造可以捕获全部特别,尽管这样做很安全,但是一般并不建议这样做。对于 特别处理构造,一般的建议是尽量显式捕获可能会消灭的特别并且有针对性地编写代码进 行处理,由于在实际应用开发中,很难使用同一段代码去处理全部类型的特别。固然,为 了避开遗漏没有得处处理的特别干扰程序的正常执行,在捕获了全部可能想到的特别之 后 , 您 也 可 以 使 用 异 常 处 理 结 构 的 最 后 一 个 except 来 捕 捉BaseExce
38、ption。2另外一种常用的异常处理结构是try.except.else.语句。3在实际开发中,同一段代码可能会抛出多个特别,需要针对不同的特别类型进展 相应的处理。为了支持多个特别的捕获和处理, Python供给了带有多个except 的特别处理构造,这类似于多分支选择构造,一旦某个 except捕获了特别,则后面剩余的except子句将不会再执行。语法为:try:try块#被监控的语句exceptException1:except块1#处理特别1的语句exceptException2:except块2#处理特别2的语句第234将要捕获的特别写在一个元组中,可以使用一个except语句捕获多
39、个特别, 并且共用同一段特别处理代码,固然,除非确定要捕获的多个特别可以使用同一段代码来 处理,并不建议这样做。5最后一种常用的异常处理结构是try.except.finally. 结 构 。 在 该 结 构 中 ,finally子句中的内存无论是否发生特别都会执行,常用来做一些清理工作以释放try子句中申请的资源。语法如下:try:finally:.#无论如何都会执行的代码8.2 特别和错误有什么区分? 答:特别是指由于程序执行过程中出错而在正常把握流以外实行的行为。严格来说,语法错误和规律错误不属于特别,但有些语法错误往往会导致特别,例如由于大小写拼写错误而访问不存在的对象,或者试图访问不存在的文件,等等。8.3 使用pdb模块进展Python程序调试主要有哪几种用法? 答:主要有三种方式,1在交互模式下使用pdb模块供给的功能可以直接调试语句块、表达式、函数等多种脚本。2在程序中嵌入断点来实现调试功能在程序中首先导入 pdb模块,然后使用