-Python程序设计基础教程(微课版) 习题及答案汇 林子雨 第1-15章 Python语言概述- 常用的标准库和第三方库_第1页
-Python程序设计基础教程(微课版) 习题及答案汇 林子雨 第1-15章 Python语言概述- 常用的标准库和第三方库_第2页
-Python程序设计基础教程(微课版) 习题及答案汇 林子雨 第1-15章 Python语言概述- 常用的标准库和第三方库_第3页
-Python程序设计基础教程(微课版) 习题及答案汇 林子雨 第1-15章 Python语言概述- 常用的标准库和第三方库_第4页
-Python程序设计基础教程(微课版) 习题及答案汇 林子雨 第1-15章 Python语言概述- 常用的标准库和第三方库_第5页
已阅读5页,还剩81页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《Python程序设计基础教程(微课版)》教材习题题目第1章Python语言概述1.Python语言具有哪些优点?具有哪些缺点?2.Python语言可以应用到哪些领域?3.Python2.x和Python3.x有哪些区别?4.请阐述什么时候适合用Python2.x?5.常见的Python第三方开发工具有哪些?6.在Python中如何进行注释?7.请举出IDLE中几个常用的快捷键。8.请阐述如何实现代码的缩进。1.Python语言具有哪些优点?具有哪些缺点?【参考答案】Python语言的优点包括以下几个方面:(1)语言简单。(2)开源、免费。(3)面向对象。(4)跨平台。(5)强大的生态系统。Python语言的缺点包括以下几个方面:(1)速度慢。(2)存在多线程性能瓶颈。(3)代码不能加密。(4)Python2.x和Python3.x不兼容。2.Python语言可以应用到哪些领域?【参考答案】Python语言发展到今天,已经被广泛应用于数据科学、人工智能、网站开发、系统管理和网络爬虫等领域。3.Python2.x和Python3.x有哪些区别?【参考答案】Python官方网站目前同时发行Python2.x和Python3.x两个不同系列的版本,并且彼此之间不兼容,除了输入输出方式有所不同,很多内置函数的实现和使用方式也有较大差别。总体而言,在语法层面,二者的主要区别表现在以下几个方面:(1)在Python2.x中,print语句被Python3.x中的print()函数所代替;(2)在Python3.x中,整数之间的相除(采用除法运算符“/”实现),结果是浮点数,而在Python2.x中结果是整数;(3)Python3.x源码文件默认使用UTF-8编码,所以支持直接写入中文,而Python2.x默认编码是ASCII,直接写入中文会被转换成ANSI编码。所以在Python2.x中需要进行相应的转换;(4)在Python3.x中将range()与xrange()函数整合为一个range()函数,所以在Python3.x中不存在xrange()函数,而在Python2.x中这个两个函数是并存的。4.请阐述什么时候适合用Python2.x?【参考答案】Python2.x提供了丰富的第三方库,Python3.x目前还在不断丰富完善中,有些在Python2.x中提供的第三方库,可能暂时无法在Python3.x中获得支持,这个时候就需要使用Python2.x。5.常见的Python第三方开发工具有哪些?【参考答案】除了Python自带的IDLE以外,我们还可以选择其他第三方开发工具进行Python编程,主要包括:(1)PyCharm。PyCharm是一款功能强大的Python编辑器,具有跨平台性,可以应用在Windows、Linux和MacOS系统中。PyCharm拥有一般的集成式开发环境应该具备的功能,比如调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单元测试、版本控制等。另外,PyCharm还提供了一些很好的功能用于Django开发,而且还支持GoogleAppEngine。(2)Eclipse。Eclipse是著名的、跨平台的自由集成式开发环境。最初主要用于Java语言开发,但是通过安装插件,可以将其作为其他计算机语言(比如C++和Python)的开发工具。如果要使用Eclipse进行Python开发,则需要安装插件PyDev。(3)JupyterNotebook。最初只支持Python开发,后来发展到可以支持其他40多种编程语言,目前已经成为用Python做教学、计算、科研的一个重要工具。6.在Python中如何进行注释?【参考答案】在Python中,通常包括3种类型的注释,分别是单行注释、多行注释和编码规则注释。(1)单行注释。Python中使用“#”表示单行注释。单行注释可以作为单独的一行放在被注释代码行之上,或者也可以放在语句或表达式之后。(2)多行注释。当注释内容过多,导致一行无法显示时,就可以使用多行注释。Python中使用三个单引号或三个双引号表示多行注释。(3)编码规则注释。编码规则注释主要是为了解决Python2.x中不支持直接写中文的问题,虽然该问题在Python3.x中已经不存在,但是,为了方便他人了解代码文件所使用的编码,建议在文件开始位置加上编码规则注释。7.请举出IDLE中几个常用的快捷键。【参考答案】F1 打开Python帮助文档F5 运行Python代码文件Ctrl+] 缩进代码块Ctrl+[ 取消代码块缩进Ctrl+Z 撤销一步操作Ctrl+Shift+Z 恢复上一次的撤销操作Ctrl+S 保存文件Alt+3 注释代码块Alt+4 取消代码块注释8.请阐述如何实现代码的缩进。【参考答案】Python和其他编程语言(比如C和Java)很不一样的地方在于,Python采用代码缩进和冒号来区分代码之间的层次,而Java和C语言则采用大括号来分隔代码块。如果我们有其他语言(如C或者Java)的编程经验,那么Python的强制缩进一开始会让我们很不习惯。但是,如果习惯了Python的缩进语法,就会觉得它非常优雅。缩进可以使用空格或者Tab键来实现(建议使用空格作为缩进)。当使用空格作为缩进时,建议使用4个空格作为一个缩进量。厦门大学林子雨编著《Python程序设计基础教程(微课版)》教材习题1.请列举Python语言中的10个关键字。2.请阐述Python标识符的具体命名规则。3.请给出合法标识符和非法标识符的几个实例。4.请阐述变量的命名规则。5.请阐述Python3.x中有哪6个标准数据类型,并说明其中哪些是基本数据类型,哪些是组合数据类型。6.请给出十进制整数、八进制整数、十六进制整数和二进制整数的具体实例。7.请给出几个常用的转义字符并说明其含义。8.请给出几个常用的数据类型转换函数并说明其含义。9.请举例说明input()和print()函数的用法。10.请说明运算符的优先级与结合性。答案第2章基础语法知识1.请列举Python语言中的10个关键字。【参考答案】except、finally、for、from、False、global、not、None、or、pass、 raise、 return2.请阐述Python标识符的具体命名规则。【参考答案】Python标识符的具体命名规则如下:(1)一个标识符可以由几个单词连接而成,以表明它的意思;(2)标识符由一个或多个字母(A~Z和a~z)、数字、下划线(_)构成,并且第一个字符不能是数字,没有长度限制;(3)标识符不能是关键字;(4)标识符中的字母是严格区分大小写的;(5)标识符中不能包含空格、@、%和$等特殊字符;(6)应该避免标识符的开头和结尾都使用下划线的情况,因为Python中大量采用这种名字定义了各种特殊方法和变量。3.请给出合法标识符和非法标识符的几个实例。【参考答案】以下是合法的标识符:MYNAME、name、name1、my_name以下是非法的标识符4gen#以数字开头for#属于Python中的关键字$book#包含了特殊字符$4.请阐述变量的命名规则。【参考答案】变量的命名需要遵循以下规则:(1)变量名必须是一个有效的标识符;(2)变量名不能使用Python中的关键字;(3)应选择有意义的单词作为变量名。5.请阐述Python3.x中有哪6个标准数据类型,并说明其中哪些是基本数据类型,哪些是组合数据类型。【参考答案】Python3.x中有6个标准的数据类型,分别是数字、字符串、列表、元组、字典和集合。这6个标准的数据类型又可以进一步划分为基本数据类型和组合数据类型。其中,数字和字符串是基本数据类型;列表、元组、字典和集合是组合数据类型。6.请给出十进制整数、八进制整数、十六进制整数和二进制整数的具体实例。【参考答案】(1)十进制整数:比如0、-3、8、110;(2)八进制整数:使用8个数字0、1、2、3、4、5、6、7来表示整数,并且必须以0o开头,比如0o43、-0o123;(3)十六进制整数:由0~9、A~F组成,必须以0x/0X开头,比如0x36、0Xa21f。(4)二进制整数:由0和1构成,比如0101、1100。7.请给出几个常用的转义字符并说明其含义。【参考答案】转义字符含义转义字符含义\n换行符\r回车\t制表符\\一个反斜杠\\'单引号\"双引号8.请给出几个常用的数据类型转换函数并说明其含义。【参考答案】函数作用int(x)把x转换成整数类型float(x)把x转换成浮点数类型str(x)把x转换成字符串chr(x)将整数x转换成一个字符ord(x)将一个字符x转换成对应的整数值9.请举例说明input()和print()函数的用法。【参考答案】例如,编写代码要求用户输入名字,具体如下:>>>name=input("请输入名字:")print语句的实例如下:>>>print("我喜欢学习")10.请说明运算符的优先级与结合性。【参考答案】运算符说明结合性优先级()小括号无高低**幂右+(正号)、-(负号)符号运算符右*、/、//、%乘除左+、-加减左==、!=、>、>=、<、<=比较运算符左not逻辑非右and逻辑与左or逻辑或左《Python程序设计基础教程(微课版)》教材习题题目第3章程序控制结构

1.编写程序,功能如下:判断输入的一个整数能否同时被2和3整除,若能,则输出“Yes”;否则输出“No”。(可使用input和eval函数进行数据的输入)2.空气质量问题一直是社会所关注的,一种简化的判别空气质量的模式如下:PM2.5数值0~35为优,35~75为良,75以上为污染,请编写程序实现如下功能:输入PM2.5的值,输出当日的空气质量情况。3.编写程序,实现分段函数的计算,分段函数如下:4.编程实现如下功能:输入层数x,打印出类似下面的等腰三角形(图中x=5)*************************5.求1到10000内的所有完美数,完美数:这个数的所有真因子(即除了自身的所有因子)的和恰好等于它本身。例如:6(6=1+2+3)和28(28=1+2+4+7+14)就是完美数。6.编程找出15个由1,2,3,4四个数字组成的各位不相同的三位数(如123,341,反例如442,333),要求用break控制个数7.一张纸的厚度大约是0.08mm,编程求对折多少次之后能达到珠穆朗玛峰的高度(8848.13米)?8."百马百担"问题:一匹大马能驮3担货,一匹中马能驮2担货,两匹小马能驮1担货,如果用一百匹马驮一百担货,问有大、中、小马各几匹?9.编程实现一个猜数字游戏,要求如下:在1到1000中随机生成一个数赋值给sys_num控制台输入一个整数赋值给user_num判断user_num与sys_num的关系如果user_num大于sys_num提示猜大了如果user_num小于sys_num提示猜小了如果两者相等提示恭喜你中奖啦要求:只要没中奖就需要一直猜提示:随机生成数可以调用random库实现(importrandom)1.编写程序,功能如下:判断输入的一个整数能否同时被2和3整除,若能,则输出“Yes”;否则输出“No”。(可使用input和eval函数进行数据的输入)【参考答案】if__name__=='__main__':a=eval(input("input:"))ifa%3==0anda%2==0:print("Yes")else:print("No")2.空气质量问题一直是社会所关注的,一种简化的判别空气质量的模式如下:PM2.5数值0~35为优,35~75为良,75以上为污染,请编写程序实现如下功能:输入PM2.5的值,输出当日的空气质量情况。【参考答案】if__name__=='__main__':PM=eval(input("请输入PM2。5的值:"))if0<=PM<35:print("优")if35<=PM<=75:print("良")if75<PM:print("污染")3.编写程序,实现分段函数的计算,分段函数如下:【参考答案】if__name__=='__main__':x=eval(input("请输入一个数:"))ifx<5:y=0elif5<=x<10:y=5*x-25else:y=pow(x-5,2)print(y)4.编程实现如下功能:输入层数x,打印出类似下面的等腰三角形(图中x=5)*************************【参考答案】if__name__=='__main__':x=eval(input("请输入层数:"))foriinrange(0,x):foreinrange(i,x):print("",end='')forjinrange(1,2*i+2):print("*",end='')print()5.求1到10000内的所有完美数,完美数:这个数的所有真因子(即除了自身的所有因子)的和恰好等于它本身。例如:6(6=1+2+3)和28(28=1+2+4+7+14)就是完美数。【参考答案】if__name__=='__main__':foriinrange(1,10000):a=i+1sum1=0forjinrange(1,a):ifa%j==0:sum1+=jifsum1==a:print(a,end='')6.编程找出15个由1,2,3,4四个数字组成的各位不相同的三位数(如123,341,反例如442,333),要求用break控制个数。【参考答案】if__name__=='__main__':cont=0foriinrange(1,5):forjinrange(1,5):forainrange(1,5):ifi!=jandj!=aanda!=i:ifcont==15:breakprint(i,j,a)cont=cont+1print(cont)7.一张纸的厚度大约是0.08mm,编程求对折多少次之后能达到珠穆朗玛峰的高度(8848.13米)?【参考答案】if__name__=='__main__':a=884813000b=8c=0whileTrue:b*=2c+=1ifb>a:print(b)breakprint(c)8."百马百担"问题:一匹大马能驮3担货,一匹中马能驮2担货,两匹小马能驮1担货,如果用一百匹马驮一百担货,问有大、中、小马各几匹?【参考答案】if__name__=='__main__':forainrange(34):forbinrange(51):forcinrange(100):if(a+b+c)==100and(3*a+2*b+0.5*c)==100:print('大马%d匹,中马%d匹,小马%d匹'%(a,b,c))9.编程实现一个猜数字游戏,要求如下:在1到1000中随机生成一个数赋值给sys_num控制台输入一个整数赋值给user_num判断user_num与sys_num的关系如果user_num大于sys_num提示猜大了如果user_num小于sys_num提示猜小了如果两者相等提示恭喜你中奖啦要求:只要没中奖就需要一直猜提示:随机生成数可以调用random库实现(importrandom)【参考答案】importrandomif__name__=='__main__':sys_num=int(random.randint(0,1000))while1:user_num=int(input('请输入一个整数:'))ifuser_num>sys_num:print('猜大了')elifuser_num<sys_num:print('猜小了')elifuser_num==sys_num:print('恭喜你中奖了')break厦门大学林子雨编著《Python程序设计基础教程(微课版)》教材习题题目第4章序列1.设计三个字典dict_a、dict_b和dict_c,每个字典中存储了一个学生的信息,包括name和id,然后把这三个字典存储到一个列表student中,遍历这个列表,将其中每个人的所有信息都打印出来。2.使用列表编写一个程序,用户输入一个月份,程序输出该月份对应的英文单词。3.编写一个用户登录程序,把多个用户的用户名和密码信息事先保存到列表当中,当用户登录时,首先判断用户名是否存在,如果不存在,就要求用户重新输入用户名(最多给3次机会);如果用户名存在,就继续判断密码是否正确,如果正确,就提示登录成功,如果密码错误,就提示重新输入密码(最多给3次机会)。4.有一个列表nums=[3,6,10,14,2,7],请编写一个程序,找到列表中任意相加等于9的元素集合,如:[(3,6),(2,7)]。5.请使用字典编写一个程序,让用户输入一个英文句子,然后统计每个单词出现的次数。6.创建一个名为universities的字典,其中将三所大学作为键。对于每所大学,都创建一个字典,设置两个键province和type,分别保存该大学的省份和类型。最后对universities字典进行遍历,打印出每所大学及其省份和类型信息。7.通过for循环创建201条数据,数据格式如下:xiaoming1xiaoming1@pwd1xiaoming2xiaoming2@pwd2xiaoming3xiaoming3@pwd3提示用户输入页码,当用户输入指定页码时,显示该页面内的数据(每页显示10条数据)。8.设计一个程序为参加歌手大赛的选手计算最终得分。评委给出的分数是0-10分。选手最后得分为:去掉一个最高分,去掉一个最低分,计算其余评委的打分的平均值。1.设计三个字典dict_a、dict_b和dict_c,每个字典中存储了一个学生的信息,包括name和id,然后把这三个字典存储到一个列表student中,遍历这个列表,将其中每个人的所有信息都打印出来。【参考答案】本实验的知识点是字典和列表的组合使用方法。具体实现代码如下:#program4-1.py#定义3个字典dict_a={'name':'ZhangSan','id':'95001'}dict_b={'name':'LiSi','id':'95002'}dict_c={'name':'WangWu','id':'95003'}#把字典保存到列表中student=[]student.append(dict_a)student.append(dict_b)student.append(dict_c)#遍历列表打印每个学生信息fordictinstudent:values=list(dict.values())print('姓名是:%s,学号是:%s'%(values[0],values[1]))在上面的代码中,使用到了字典的values方法,这个方法返回的是一个dict_values对象,Python不希望用户直接操作这个对象,因此,可通过list函数把它转换成列表。2.使用列表编写一个程序,用户输入一个月份,程序输出该月份对应的英文单词。【参考答案】本实验的知识点是列表的创建和成员资格判断操作符in。可以使用in操作符判断一个值是否存在于列表中。具体实现代码如下:#program4-2.py#接收用户输入月份month=int(input('请输入月份:'))#定义季度列表quarter_one=[1,2,3]quarter_two=[4,5,6]quarter_three=[7,8,9]quarter_four=[10,11,12]#判断用户输入的月份属于哪个季节ifmonthinquarter_one:print('%d月属于第一季度'%month)elifmonthinquarter_two:print('%d月属于第二季度'%month)elifmonthinquarter_three:print('%d月属于第三季度'%month)elifmonthinquarter_four:print('%d月属于第四季度'%month)else:print('请输入正确的月份')3.编写一个用户登录程序,把多个用户的用户名和密码信息事先保存到列表当中,当用户登录时,首先判断用户名是否存在,如果不存在,就要求用户重新输入用户名(最多给3次机会);如果用户名存在,就继续判断密码是否正确,如果正确,就提示登录成功,如果密码错误,就提示重新输入密码(最多给3次机会)。【参考答案】本实验的知识点是列表的用法。具体实现代码如下:#program4-3.py#定义列表用来保存用户名和密码users=['u1','u2','u3']passwords=['p1','p2','p3']#定义尝试登录的次数try_count=0#判断尝试登录次数是否超过3次whiletry_count<3:#接收用户输入的用户名和密码input_username=input('请输入用户名:')input_password=input('请输入密码:')try_count+=1#判断用户名是否存在ifinput_usernameinusers:#先找出用户对应的索引值index=users.index(input_username)#根据索引值在密码列表中找到该用户对应的密码password=passwords[index]#判断输入的密码是否正确ifinput_password==password:print('%s登录成功'%input_username)breakelse:iftry_count<3:print('%s密码错误,请重新登录'%input_username)else:iftry_count<3:print('用户名%s不存在,请重新登录'%input_username)iftry_count==3:print('你尝试次数已经超过3次,程序结束')4.有一个列表nums=[3,6,10,14,2,7],请编写一个程序,找到列表中任意相加等于9的元素集合,如:[(3,6),(2,7)]。【参考答案】本实验的知识点是列表的用法。具体实现代码如下:#program4-4.pynums=[3,6,10,14,2,7]aList=[]n=len(nums)foriinrange(0,n-1):forjinrange(i+1,n):ifnums[i]+nums[j]==9:num_tupple=(nums[i],nums[j])aList.append(num_tupple)print(aList)5.请使用字典编写一个程序,让用户输入一个英文句子,然后统计每个单词出现的次数。【参考答案】本实验的知识点是字典的应用。可以设置一个字典,让字典中每个元素的key用来存储单词,value用来存储这个单词对应的出现次数。具体实现代码如下:#program4-5.pyinput_str=input('请输入一个英文句子:')word_list=input_str.split('')word_dict={}forwordinword_list:ifwordnotinword_dict:word_dict[word]=1else:word_dict[word]+=1forkey,valueinword_dict.items():print('%s的出现次数是%d'%(key,value))6.创建一个名为universities的字典,其中将三所大学作为键。对于每所大学,都创建一个字典,设置两个键province和type,分别保存该大学的省份和类型。最后对universities字典进行遍历,打印出每所大学及其省份和类型信息。【参考答案】本实验的知识点是字典的用法。具体实现代码如下:#program4-6.py#定义字典universitiesuniversities={}#定义3个字典,保存3所大学信息dict_a={'北京大学':{'province':'北京','type':'985'}}dict_b={'厦门大学':{'province':'福建','type':'985'}}dict_c={'福州大学':{'province':'福建','type':'211'}}#把3个字典作为元素添加到universities字典中universities.update(dict_a)universities.update(dict_b)universities.update(dict_c)#遍历字典打印每所大学信息fork,vinuniversities.items():print('大学名称是:%s'%k)info=list(v.values())print('所属省份是:%s,类型是:%s'%(info[0],info[1]))7.通过for循环创建201条数据,数据格式如下:xiaoming1xiaoming1@pwd1xiaoming2xiaoming2@pwd2xiaoming3xiaoming3@pwd3提示用户输入页码,当用户输入指定页码时,显示该页面内的数据(每页显示10条数据)。【参考答案】本实验的知识点是列表的切片操作以及字典的遍历方法。具体实现代码如下:#program4-7.pyuser_list=[]foriinrange(1,202):temp={"name":"xiaoming"+str(i),"E-mail":"xiaoming"+str(i)+"@","password":"pwd"+str(i)}user_list.append(temp)whileTrue:s=input('请输入页码:')ifs.isdigit():s=int(s)start=(s-1)*10end=s*10result=user_list[start:end]fordictinresult:values=list(dict.values())print('姓名是:%s,E-mail是:%s,密码是%s'%(values[0],values[1],values[2]))else:print('输入格式错误')8.设计一个程序为参加歌手大赛的选手计算最终得分。评委给出的分数是0-10分。选手最后得分为:去掉一个最高分,去掉一个最低分,计算其余评委的打分的平均值。本实验的知识点是列表的用法。具体实现代码如下:#program4-8.pyscores=[]count=int(input("清确认评委人数:"))print("请输入%d位评委对选手的打分(0~10分):"%count)foriinrange(count): score=float(input("第%d位评委打分:"%(i+1))) whilescore<0orscore>10: score=float(input("打分错误,请重新打分(0~10分):")) scores.append(score)scores.sort()print("去掉一个最高分%.2f分,去掉一个最低分%.2f分,最终得分:%.2f"%(scores[count-1],scores[0],(sum(scores)-scores[0]-scores[count-1])/(count-2)))厦门大学林子雨编著《Python程序设计基础教程(微课版)》教材习题题目第5章字符串1.从1计数至1000,并且以进度条的形式显示计数进度(提示:此题在Windows命令行模式下执行比较简单)。2.试着用写成一行的字符串,输出以下内容:堂堂堂堂堂堂堂堂食堂堂堂堂堂堂堂堂堂门堂3.任意给定一个字符串,在不使用Python自带的字符串切片方法的前提下,使用代码进行字符串切片,输出结果;再用Python自带的字符串切片方法对该字符串切片,也输出结果。4.编写代码验证每种字符串拼接方法的效率。5.找出“你好!世界!”的Unicode字符,并用字符串输出。6.编程输出下图。其中,0、1、2、⋯⋯和−1、−2、−3、⋯⋯都是字符串的索引值,字符串需要由变量指定,每一个框都是由加号和减号组成的,箭头是大于号和小于号。1.从1计数至1000,并且以进度条的形式显示计数进度(提示:此题在Windows命令行模式下执行比较简单)。【参考答案】bar="\u2589";start=0;end=1000;while(start<end):percent=start*100/end;count=int(percent/10);print("["+bar*count+"-"*(10-count)+f"]-{percent}%",end="\r");start=start+1;print();2.试着用写成一行的字符串,输出以下内容:堂堂堂堂堂堂堂堂食堂堂堂堂堂堂堂堂堂门堂【参考答案】print("堂堂\r\n堂堂堂堂\r\n堂堂食堂堂堂\r\n堂堂堂堂\r\n堂堂门堂")3.任意给定一个字符串,在不使用Python自带的字符串切片方法的前提下,使用代码进行字符串切片,输出结果;再用Python自带的字符串切片方法对该字符串切片,也输出结果。【参考答案】aString="string";m=1;n=2;length=len(aString);while(m<length):print(aString[m],end="");m=m+n;print();print(aString[1::2]);4.编写代码验证每种字符串拼接方法的效率。【参考答案】fromtimeimporttimeprint();source="python课程"t=time()foriinrange(1000000):s="python课程""python课程""python课程""python课程""python课程"print(f"编译时连接耗时:{time()-t}s")t=time()foriinrange(1000000):s=source+source+source+source+sourceprint(f"加号连接耗时:{time()-t}s")t=time()foriinrange(1000000):s="""\%s%s%s%s%s"""%(source,source,source,source,source)print(f"%连接耗时:{time()-t}s")t=time()foriinrange(1000000):s=source*5print(f"乘号连接耗时:{time()-t}s")array=[source,source,source,source,source]foriinrange(1000000):s=''.join(array);print(f"join连接耗时:{time()-t}s")t=time()foriinrange(1000000):s=f"""\{source}{source}{source}{source}{source}"""print(f"格式字符串耗时:{time()-t}s")t=time()foriinrange(1000000):s="""\{0}{0}{0}{0}{0}""".format(source)print(f"format函数耗时:{time()-t}s")print();5.找出“你好!世界!”的Unicode字符,并用字符串输出。【参考答案】提示:字符串里,Unicode码需要使用16进制写法。string="\u4F60\u597D\uFF01\u4E16\u754C\uFF01"print(string)6.编程输出下图。其中,0、1、2、⋯⋯和−1、−2、−3、⋯⋯都是字符串的索引值,字符串需要由变量指定,每一个框都是由加号和减号组成的,箭头是大于号和小于号。【参考答案】print();source="Hello!World";start=0;print("正向索引>>>");forletterinsource:print(f"{start:<4}",end='');start+=1;print();forletterinsource:print(f"+",end='');print("+");forletterinsource:print(f"|{letter}",end='');print("|");forletterinsource:print(f"+",end='');print("+");start=-len(source);print("",end='');forletterinsource:print(f"{start:>4}",end='');start+=1;print();totalLength=len(source)*4-3;print(f"{'<<<反向索引':>{totalLength}}")print();《Python程序设计基础教程(微课版)》教材习题题目第6章函数1.编写函数,返回斐波那契数列的列表。注:斐波那契数列指的是这样一个数列:0,1,1,2,3,5,8,13,21,34,⋯。在数学上,斐波那契数列以如下递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n−1)+F(n−2)(n≥2,n∈N)。2.编写函数,打印n行的金字塔。3.编写函数,用非递归形式实现冒泡排序。4.编写函数,用递归形式实现汉诺塔问题。1.编写函数,返回斐波那契数列的列表。注:斐波那契数列指的是这样一个数列:0,1,1,2,3,5,8,13,21,34,⋯。在数学上,斐波那契数列以如下递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n−1)+F(n−2)(n≥2,n∈N)。【参考答案】#Fibonacci0.py#函数定义deffib(n):#writeFibonacciseriesupton"PrintaFibonacciseriesupton."#打印不大于n的斐波拉契数列元素"""a,b=0,1whilea<n:print(a,end='')a,b=b,a+b#print()return#函数调用fib(2000)2.编写函数,打印n行的金字塔。【参考答案】#pyramid.pydefpyramid(n):foriinrange(n):blank_num=n-istar_num=2*i+1forjinrange(blank_num):print('',end='')forkinrange(star_num):print('*',end='')print('')pyramid(10)pyramid(20)3.编写函数,用非递归形式实现冒泡排序。【参考答案】#bubblesort.pydefbubbleSort(arr,ifPositive=True):n=len(arr)foriinrange(n):forjinrange(0,n-i-1):if(ifPositive):ifarr[j]>arr[j+1]:arr[j],arr[j+1]=arr[j+1],arr[j]else:ifarr[j]<arr[j+1]:arr[j],arr[j+1]=arr[j+1],arr[j]arr=[88,33,-10,100,0,20,32,108,9]bubbleSort(arr)print("排序后的数组(正序):")foriinrange(len(arr)):print("%d"%arr[i])bubbleSort(arr,False)print("排序后的数组(倒序):")foriinrange(len(arr)):print("%d"%arr[i])4.编写函数,用递归形式实现汉诺塔问题。【参考答案】#honoi.pydefhanoi(n,a,b,c):ifn==1:print(a,"-->",c)returnhanoi(n-1,a,c,b)print(a,"-->",c)hanoi(n-1,b,a,c)n,a,b,c=5,"A","B","C"hanoi(n,a,b,c)厦门大学林子雨编著《Python程序设计基础教程(微课版)》教材习题题目第7章面向对象程序设计(版本号:2022年1月版本)主讲教师:林子雨厦门大学数据库实验室二零二二年一月厦门大学林子雨编著《Python程序设计基础教程(微课版)》教材配套实验指南第1章Python语言概述 第1页

一、简答题1. 简单描述保护属性安全性的一般处理方式。2. 简单描述什么是多重继承。3. 简单描述什么是方法的重写。编程题1.定义一个类判断给定字符串中的括号(包括“<>”、“()”、“[]”、“{}”四种类型的括号)是否正确配对。例如:"()adafd{)}"是错误配对,"()adafd{(<>)}"是正确配对,"{[({})]}"是正确配对。2.实现一个名为“Rectangle”的表示矩形的类,该类包含两个公有的实例属性width和height,分别表示矩形的宽和高,同时还有一个名为aera的公有方法,该方法返回矩形的面积。3.修改习题2中的Rectangle类,将实例属性width和height改为可读写的property,并且在写操作时检查是否为正值,将area方法改为一个只读的property。下面是测试代码:>>>a=Rectangle(3,4)>>>a.width=-5#输出错误提示>>>a.width=5>>>a.height=0#输出错误提示>>>a.height=2>>>a.area#返回10>>>a.area=12#输出“AttributeError:can'tsetattribute”4.创建一个User类,其包含一个name的实例属性,由构造函数初始化,还包含一个名为count的类属性用于统计用户数目(创建的实例数)。下面是测试代码:>>>a=User('Mike')>>>User.count#输出1>>>b=User('Tom')>>>User.count#输出2>>>c=User('Jack')>>>User.count#输出35.定义一个名为Calculator的类,使用静态方法定义四个表示加减乘除的运算。测试代码如下:>>>Calculator.add(10,5)#返回15>>>Calculator.subtract(10,5)#返回5>>>Calculator.multiply(10,5)#返回50>>>Calculator.divide(10,5)#返回26.请修改下面的Point类,通过重写相应魔法方法使其支持如下运算符操作:p1+p2,用两个点的x、y坐标分别相加,返回一个新的Point对象;p1-p2,用两个点的x、y坐标分别相减,返回一个新的Point对象;p*n,用点的x、y坐标分别乘以数值n,返回一个新的Point对象;p/n,用点的x、y坐标分别除以数值n,返回一个新的Point对象。classPoint:#请直接修改该类的定义def__init__(self,x,y):self.x=xself.y=ydef__str__(self):return'Point('+str(self.x)+','+str(self.y)+')'if__name__=='__main__':#这是测试代码a,b=Point(4,5),Point(2,3)print(a+b)#输出结果为'Point(6,8)'print(a-b)#输出结果为'Point(2,2)'print(a*2)#输出结果为'Point(8,10)'print(a/2)#输出结果为'Point(2.0,2.5)'7.请继承习题3中的Rectangle类来实现一个名为Square的正方形类,使得可以用Square(边长)的方式实例化该类,并重写父类中width和height的写方法,实现长和高的同时修改。测试代码如下:>>>a=Square(5)>>>a.width=10#同时修改height>>>a.height#输出10>>>a.height=20#要求同时修改width>>>a.width#输出20>>>a.area#输出4008.继承内建的字符串类,实现对字符串的左右循环移动给定整数位(正数代表左移,负数代表右移)。9.请用继承的方法完成习题6的要求。10.考虑如下一个简单的图形绘制程序。定义一个Point类表示二维平面上的点(可以借鉴第6题)。所有图形实体的基类为Shape,其包含一个Point类型的position实例属性,用于表示图形的位置。Shape类有一个方法move_to将图形的位置移动到新的位置,shape还包括一个draw方法,打印输出Shape对象的字符串表示。继承Shape类的具体图形类型包括线段类Line和圆类Circle。Line类初始化的第一个参数为一个端点,也是其位置,另一个参数表示另一个端点,作为另一个实例属性。Circle类初始化的第一个参数表示其圆心,也是其位置,另一个参数表示其半径,作为另一个实例属性。如下的代码已经给出了Shape类的定义,请完成Point类、Line类和Circle类的定义。Line类需要重写move_to方法,在移动位置的同时修改另一个端点的坐标。另外,Line类和Circle类都要求对__str__重写实现,以得到更直观的draw效果,其中类Line的输出信息样式为“Line:第一个端点的坐标--第二个端点的坐标)”,类Circle的输出信息样式为“Circlecenter:圆心坐标,R=半径”。部分例程和测试代码如下:#请实现类Point、Line、CircleclassShape: #不要修改该类def__init__(self):self.position=Point(0,0)defdraw(self):print(str(self))defmove_to(self,position):print("movingto",str(position))self.position=position#下面是测试代码if__name__=='__main__':l=Line(Point(0,0),Point(20,20))l.draw()l.move_to(Point(3,5))#移动到一个新的点l.draw()c=Circle(Point(10,10),5)c.draw()c.move_to(Point(30,20))c.draw()#下面是脚本的期望输出Line:(0,0)(20,20)movingto(3,5)Line:(3,5)(23,25)Circlecenter:(10,10),R=5movingto(30,20)Circlecenter:(30,20),R=5《Python程序设计基础教程(微课版)》教材习题答案第7章面向对象程序设计一、简答题1. 简单描述保护属性安全性的一般处理方式。【参考答案】把这个属性设置为私有的,并设置相应的读写方法。2. 简单描述什么是多重继承。【参考答案】一个子类有多个直接父类。3. 简单描述什么是方法的重写。【参考答案】子类采用同样的方法签名修改继承自父类的方法。编程题1.定义一个类判断给定字符串中的括号(包括“<>”、“()”、“[]”、“{}”四种类型的括号)是否正确配对。例如:"()adafd{)}"是错误配对,"()adafd{(<>)}"是正确配对,"{[({})]}"是正确配对。【参考答案】classSolution:defis_valid(self,str1):stack=[]parenthese_dict={"<":">","(":")","{":"}","[":"]"}forcinstr1:ifcinparenthese_dict.keys():stack.append(c)elifcinparenthese_dict.values():iflen(stack)==0orparenthese_dict[stack.pop()]!=c:returnFalsereturnlen(stack)==0if__name__=='__main__':print(Solution().is_valid("()adafd{)}"))#输出Falseprint(Solution().is_valid("()adafd{(<>)}"))#输出Trueprint(Solution().is_valid("{[({})]}"))#输出True2.实现一个名为“Rectangle”的表示矩形的类,该类包含两个公有的实例属性width和height,分别表示矩形的宽和高,同时还有一个名为aera的公有方法,该方法返回矩形的面积。【参考答案】classRectangle:def__init__(self,width,height):self.width=widthself.height=heightdefarea(self):returnself.width*self.height3.修改习题2中的Rectangle类,将实例属性width和height改为可读写的property,并且在写操作时检查是否为正值,将area方法改为一个只读的property。下面是测试代码:>>>a=Rectangle(3,4)>>>a.width=-5#输出错误提示>>>a.width=5>>>a.height=0#输出错误提示>>>a.height=2>>>a.area#返回10>>>a.area=12#输出“AttributeError:can'tsetattribute”【参考答案】classRectangle:def__init__(self,width,height):self._width=width#为了实现后文的继承,将属性设为保护型的self._height=height@propertydefwidth(self):returnself._width@width.setterdefwidth(self,width):if(width<=0):print('width必须为正值,设置失败')else:print('width设置成功')self._width=width@propertydefheight(self):returnself._height@height.setterdefheight(self,height):if(height<=0):print('height必须为正值,设置失败')else:print('height设置成功')self._height=height@propertydefarea(self):returnself.width*self.height4.创建一个User类,其包含一个name的实例属性,由构造函数初始化,还包含一个名为count的类属性用于统计用户数目(创建的实例数)。下面是测试代码:>>>a=User('Mike')>>>User.count#输出1>>>b=User('Tom')>>>User.count#输出2>>>c=User('Jack')>>>User.count#输出3【参考答案】classUser(object):count=0def__init__(self,name):=nameUser.count+=15.定义一个名为Calculator的类,使用静态方法定义四个表示加减乘除的运算。测试代码如下:>>>Calculator.add(10,5)#返回15>>>Calculator.subtract(10,5)#返回5>>>Calculator.multiply(10,5)#返回50>>>Calculator.divide(10,5)#返回2【参考答案】classCalculator:@staticmethoddefadd(x,y):returnx+y@staticmethoddefsubtract(x,y):returnx-y@staticmethoddefmultiply(x,y):returnx*y@staticmethoddefdivide(x,y):returnx/y6.请修改下面的Point类,通过重写相应魔法方法使其支持如下运算符操作:p1+p2,用两个点的x、y坐标分别相加,返回一个新的Point对象;p1-p2,用两个点的x、y坐标分别相减,返回一个新的Point对象;p*n,用点的x、y坐标分别乘以数值n,返回一个新的Point对象;p/n,用点的x、y坐标分别除以数值n,返回一个新的Point对象。classPoint:#请直接修改该类的定义def__init__(self,x,y):self.x=xself.y=ydef__str__(self):return'Point('+str(self.x)+','+str(self.y)+')'if__name__=='__main__':#这是测试代码a,b=Point(4,5),Point(2,3)print(a+b)#输出结果为'Point(6,8)'print(a-b)#输出结果为'Point(2,2)'print(a*2)#输出结果为'Point(8,10)'print(a/2)#输出结果为'Point(2.0,2.5)'【参考答案】classPoint:def__init__(self,x,y):self.x=xself.y=ydef__str__(self):return'Point('+str(self.x)+','+str(self.y)+')'def__add__(self,other):returnPoint(self.x+other.x,self.y+other.y)def__sub__(self,other):returnPoint(self.x-other.x,self.y-other.y)def__mul__(self,n):returnPoint(self.x*n,self.y*n)def__truediv__(self,n):returnPoint(self.x/n,self.y/n)if__name__=='__main__':#这是测试代码a,b=Point(4,5),Point(2,3)print(a+b)#输出结果为'Point(6,8)'print(a-b)#输出结果为'Point(2,2)'print(a*2)#输出结果为'Point(8,10)'print(a/2)#输出结果为'Point(2.0,2.5)'7.请继承习题3中的Rectangle类来实现一个名为Square的正方形类,使得可以用Square(边长)的方式实例化该类,并重写父类中width和height的写方法,实现长和高的同时修改。测试代码如下:>>>a=Square(5)>>>a.width=10#同时修改height>>>a.height#输出10>>>a.height=20#要求同时修改width>>>a.width#输出20>>>a.area#输出400【参考答案】classRectangle:def__init__(self,width,height):self._width=widthself._height=height@propertydefwidth(self):returnself._width@width.setterdefwidth(self,width):if(width<=0):print('width必须为正值,设置失败')else:print('width设置成功')self._width=width@propertydefheight(self):returnself._height@height.setterdefheight(self,height):if(height<=0):print('height必须为正值,设置失败')else:print('height设置成功')self._height=height@propertydefarea(self):returnself.width*self.heightclassSquare(Rectangle):def__init__(self,width):super().__init__(width,width)@Rectangle.height.setterdefheight(self,height):if(height<=0):print('height必须为正值,设置失败')else:print('height设置成功')self._height=heightself._width=height@Rectangle.width.setterdefwidth(self,width):if(width<=0):print('width必须为正值,设置失败')else:print('width设置成功')self._width=widthself._height=widthb=Square(4)print(b.width)print(b.height)b.width=-5#输出错误提示b.width=5b.height=0#输出错误提示b.height=2print(b.area)#返回4b.area=12#输出“AttributeError:can'tsetattribute”8.继承内建的字符串类,实现对字符串的左右循环移动给定整数位(正数代表左移,负数代表右移)。【参考答案】classMoveableStr(str):defmove(self,n):temp=n%len(self)returnself[temp:]+self[:temp]if__name__=='__main__':a=MoveableStr("abcde")print(a.move(3))#输出deabcprint(a.move(-3))#输出cdeab9.请用继承的方法完成习题6的要求。【参考答案】classPoint:def__init__(self,x,y):self.x=xself.y=ydef__str__(self):return'Point('+str(self.x)+','+str(self.y)+')'classPoint1(Point):def__add__(self,other):returnPoint1(self.x+other.x,self.y+other.y)def__sub__(self,other):returnPoint1(self.x-other.x,self.y-other.y)def__mul__(self,n):returnPoint1(self.x*n,self.y*n)def__truediv__(self,n):returnPoint1(self.x/n,self.y/n)if__name__=='__main__':#这是测试代码a,b=Point1(4,5),Point1(2,3)print(a+b)#输出结果为'Point(6,8)'print(a-b)#输出结果为'Point(2,2)'print(a*2)#输出结果为'Point(8,10)'print(a/2)#输出结果为'Point(2.0,2.5)'

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论