Python程序设计教程 习题及答案汇 任美玲 习题1-13_第1页
Python程序设计教程 习题及答案汇 任美玲 习题1-13_第2页
Python程序设计教程 习题及答案汇 任美玲 习题1-13_第3页
Python程序设计教程 习题及答案汇 任美玲 习题1-13_第4页
Python程序设计教程 习题及答案汇 任美玲 习题1-13_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

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

文档简介

习题1-习题解答一、选择题(每题只有1个正确答案)1.下列关于“程序”的描述中,正确的是()。A.程序必须由图形化界面组成B.程序是一组为完成特定任务而编写的指令集合C.程序不能在无网络环境下运行D.程序只包含数据,不包含逻辑2.下列关于Python特点的描述中,错误的是()。A.Python是解释型语言B.Python拥有丰富的标准库C.Python代码必须编译成可执行文件才能运行D.Python使用缩进表示语句块3.在Python中,单行注释使用的符号开头()。A.// B.<!----> C.# D./**/4.Python强制使用缩进的主要目的是什么?A.增加代码长度 B.让编译器更快 C.使代码结构清晰 D.让程序运行更快二、编程题1.在程序中编写三行注释,分别说明你的姓名、日期、写这段代码的目的。2.使用JupyterLab,新建一个Notebook,并在程序中让Python故意漏写缩进,使其报错。观察错误提示,然后修正程序使其正确执行。Python习题参考答案一、选择题答案:B解析:程序是完成特定任务的指令集合,程序不一定有图形界面、可离线运行,同时包含数据和逻辑。答案:C解析:Python是解释型语言,无需提前编译为可执行文件即可直接运行。答案:C解析:Python单行注释以#开头;//是C/C++/Java单行注释,<!---->是HTML注释,/**/是多行块注释。答案:C解析:缩进用于划分代码语句块,让代码层级、结构更清晰。二、编程题第1题:编写多行注释Python中单行注释用#,示例代码如下:python运行#姓名:张三#日期:2026年06月11日#代码目的:练习Python基础注释语法print("注释练习完成")第2题:缩进报错演示与修正1.错误代码(故意缺失缩进,运行报错)Python中if、for、while等语句后的代码块必须缩进,以下代码缺少缩进:python运行a=10ifa>5:print("数值大于5")#此行未缩进,会触发语法错误报错信息:IndentationError:expectedanindentedblock含义:缩进错误,预期存在缩进代码块。2.修正后代码(增加缩进,正常运行)Python规范一般使用4个空格作为缩进:python运行a=10ifa>5:print("数值大于5")#增加4格缩进,代码正常执行运行结果:plaintext数值大于5操作步骤(JupyterLab)打开JupyterLab,点击New→选择Python(ipykernel),新建Notebook;在代码单元格中粘贴错误代码,点击运行按钮,查看缩进报错;给print语句添加缩进,重新运行,代码正常执行。习题2-习题解答一、选择题1.下列关于变量的说法中,正确的是()。A.变量在程序运行过程中不能改变 B.变量名可以以数字开头C.变量是对内存中对象的引用 D.Python必须在使用变量前声明类型2.下列标识符中,合法的是()。A.2name B.my-name C.class D._score3.执行语句a=b=10后,下列说法正确的是()。A.a和b仅名字相同 B.a和b引用同一个对象C.a和b类型不同 D.执行时会产生错误4.关于显式类型转换,下列语句正确的是()。A.int("3.14") B.float("3") C.str(3+4j) D.int(True)5.下列运算符优先级从高到低正确的是()。A.加法>乘法>幂运算 B.幂运算>乘法>加法C.乘法>幂运算>加法 D.幂运算>加法>乘法6.关于input(),下列说法正确的是()。A.input()读取的内容默认转换为整数 B.input()读取的是字符串C.input()不能读取空格 D.input()每次读取一个字符二、编程题1.输入姓名和年龄,输出格式化欢迎语句:“你好,xxx,你今年xx岁!”2.输入秒数,计算并输出对应的“分钟+秒”格式。例如,125秒输出2分5秒。3.输入两个浮点数,分别输出它们的四则运算结果。4.设计一个程序,输入语文、数学和英语三门课的成绩,计算总分与平均分并输出。参考答案与解析一、选择题答案:C解析:变量运行中值可修改;变量名不能以数字开头;Python是动态类型,无需提前声明类型;变量本质是内存对象的引用。答案:D解析:A以数字开头、B含减号,均不合法;Cclass是Python关键字,不能用作变量名;下划线开头的_score是合法标识符。答案:B解析:a=b=10是链式赋值,a、b指向内存中同一个数值对象,二者类型也完全一致。答案:B解析:A:字符串"3.14"含小数,无法直接转整数,报错;B:float("3")可将数字字符串转为浮点数,语法正确;C:Python不支持复数直接用str()以外的方式做这类非法转换,本题语法不符合题意;D:语法上int(True)结果为1,但结合考点,本题最优答案为B。答案:B解析:Python运算符优先级:幂运算>乘除>加减。答案:B解析:input()接收的所有内容默认都是字符串类型,支持读取空格,一次性读取整行内容。二、编程题(代码+运行说明)1.输入姓名、年龄,格式化输出欢迎语#获取输入name=input("请输入姓名:")age=input("请输入年龄:")#格式化输出print(f"你好,{name},你今年{age}岁!")2.秒数转换为分钟+秒#接收输入并转为整数total_sec=int(input("请输入总秒数:"))#计算分钟和剩余秒数minute=total_sec//60sec=total_sec%60print(f"{minute}分{sec}秒")示例:输入125,输出2分5秒。3.输入两个浮点数,输出四则运算结果#输入并转浮点型num1=float(input("请输入第一个数字:"))num2=float(input("请输入第二个数字:"))#四则运算add=num1+num2sub=num1-num2mul=num1*num2div=num1/num2print(f"加法结果:{add}")print(f"减法结果:{sub}")print(f"乘法结果:{mul}")print(f"除法结果:{div}")4.输入三门成绩,计算总分、平均分#输入三科成绩chinese=float(input("请输入语文成绩:"))maths=float(input("请输入数学成绩:"))english=float(input("请输入英语成绩:"))#计算总分、平均分total=chinese+maths+englishaverage=total/3print(f"总分:{total}")print(f"平均分:{average:.2f}")#保留2位小数输出习题3-习题解答一、选择题1.下列关于if语句缩进的描述,错误的是()。A.if语句块必须缩进 B.缩进通常为4个空格C.同一语句块中缩进不必保持一致 D.if后必须跟条件表达式2.下列哪个表达式的结果为False?A.3>2and5>1 B.3>5or2>1C.not(3<1) D.4<23.关于短路求值,下列说法正确的是()。A.and运算中,前半部分为False时不会继续求值B.and运算中,前半部分为True时不会继续求值C.or运算中,前半部分为False时不会继续求值D.所有逻辑运算符都没有短路特性4.执行ifx:时,当条件成立的情况是()。A.x为任意整数 B.x为True或非零值C.x为零 D.x为空字符串5.执行如下代码时x=5,将输出()。ifx>10:print("A")elifx>7:print("B")elifx>3:print("C")else:print("D")A.A B.B C.C D.D6.下面代码的输出结果是()。x=8y=3print("Yes"ifx%y==2else"No")A.Yes B.No C.y D.x二、编程题1.判断一个数是否为正数。输入一个整数,如果大于0输出“Positive”,否则输出“Non-positive”。2.判断输入的年份是否为闰年。判断规则:能被400整除是闰年,能被4整除但不能被100整除是闰年。3.输入两个数,比较它们的大小并输出较大的一个。4.模拟登录验证。设定正确用户名为admin,密码为123456。输入用户名和密码,判断是否允许登录。5.输入三条边长,判断能否组成三角形。三角形判定条件:任意两边之和大于第三边。6.购买商品打折。输入原价price:price≥100,打9折price≥200,打8折price≥500,打7折计算最终应付金额。7.输入一个月份(1~12),判断属于哪个季节。春季:3~5,夏季:6~8,秋季:9~11,冬季:12,1,2。8.根据小时数输出问候语。输入当前小时(0~23):5~11为上午好;12~17为下午好;18~22为晚上好;23,0~4为深夜好。一、选择题答案及解析答案:C解析:Python中同一代码块缩进必须统一,否则会报错。答案:D解析:A:TrueandTrue→TrueB:FalseorTrue→TrueC:notFalse→TrueD:4<2→False答案:A解析:and前面为False直接短路,不再执行后面表达式;or前面为True才会短路。答案:B解析:Python布尔判定:非零数字、非空对象、True都视为真;0、空字符串、空容器、False视为假。答案:C解析:x=5,满足5>3,执行对应分支输出C。答案:A解析:8%3=2,条件成立,输出Yes。二、编程题(Python代码)1.判断正数num=int(input("请输入一个整数:"))ifnum>0:print("Positive")else:print("Non-positive")2.判断闰年year=int(input("请输入年份:"))if(year%400==0)or(year%4==0andyear%100!=0):print("是闰年")else:print("不是闰年")3.求两数最大值a=float(input("请输入第一个数:"))b=float(input("请输入第二个数:"))ifa>b:print(a)else:print(b)4.模拟登录username=input("请输入用户名:")pwd=input("请输入密码:")ifusername=="admin"andpwd=="123456":print("登录成功")else:print("用户名或密码错误")5.判断能否构成三角形a=float(input("请输入第一条边长:"))b=float(input("请输入第二条边长:"))c=float(input("请输入第三条边长:"))ifa+b>canda+c>bandb+c>a:print("可以组成三角形")else:print("不能组成三角形")6.商品打折price=float(input("请输入商品原价:"))ifprice>=500:final=price*0.7elifprice>=200:final=price*0.8elifprice>=100:final=price*0.9else:final=priceprint("应付金额:",final)7.判断季节month=int(input("请输入月份(1-12):"))if3<=month<=5:print("春季")elif6<=month<=8:print("夏季")elif9<=month<=11:print("秋季")else:print("冬季")8.按小时输出问候语hour=int(input("请输入小时(0-23):"))if5<=hour<=11:print("上午好")elif12<=hour<=17:print("下午好")elif18<=hour<=22:print("晚上好")else:print("深夜好")习题4-习题解答一、选择题1.关于while循环,下列说法正确的是()。A.while语句至少执行一次B.while条件为False时仍会执行C.while循环依赖布尔条件控制是否继续执行D.while循环必须与else一起出现2.range(2,10,2)生成的序列是()。A.2,3,4,5,6 B.2,4,6,8 C.2,5,8 D.2,4,6,8,103.下列关于for循环的说法正确的是()。A.for循环只能用于列表 B.for循环不能用于字符串C.for循环可用于遍历任何可迭代对象 D.for循环必须搭配range()4.break语句的作用是()。A.跳过本次循环,继续下一次 B.跳出当前循环C.跳出所有循环 D.程序报错5.continue语句的作用是()。A.终止循环 B.跳出循环并结束程序C.结束当前循环,继续下一轮 D.执行else子句6.关于嵌套循环,下列说法正确的是()。A.外层循环执行一次,内层循环执行一次B.内层循环执行的总次数等于内层循环执行次数×外层循环执行次数C.break语句会同时跳出两层循环D.continue语句只能用于内层循环二、编程题1.使用while循环不断读取用户输入的整数,直到输入0为止,计算所有输入数的平均值。2.给定一个整数n,使用for循环打印n的所有因子(从小到大)。3.输入若干学生的成绩(0~100),遇到负数结束输入,并统计:学生人数、平均分、最高分与最低分(使用while循环)。4.使用for循环+range()打印如下图案(n=5):***************5.输入一个整数n,判断是否为质数(使用循环)。若是质数输出“Yes”,否则输出“No”。一、选择题答案+解析答案:C解析:while依靠布尔条件判断循环是否执行;条件为False时循环不执行,也不是必须搭配else。答案:B解析:range(起始,结束,步长),取值不包含结束值,结果:2,4,6,8。答案:C解析:for循环可遍历字符串、列表、range等所有可迭代对象,不局限于列表,也不是必须用range()。答案:B解析:break跳出当前所在循环;只跳过本次循环是continue。答案:C解析:continue终止当前这一轮循环,直接进入下一轮循环。答案:B解析:外层每执行一次,内层完整跑完一轮;内层总次数=外层次数×单层内层次数。break/continue只作用于当前层循环。二、编程题(Python代码)1.while循环输入整数,输入0停止,求平均值sum_num=0count=0whileTrue:num=int(input("请输入整数,输入0结束:"))ifnum==0:breaksum_num+=numcount+=1ifcount==0:print("未输入有效数字")else:avg=sum_num/countprint(f"平均值为:{avg}")2.for循环打印整数n的所有因子n=int(input("请输入一个整数:"))print("所有因子:")foriinrange(1,n+1):ifn%i==0:print(i,end="")3.while循环录入成绩(负数结束),统计人数、平均分、最高分、最低分scores=[]whileTrue:score=int(input("请输入学生成绩(输入负数结束):"))ifscore<0:breakif0<=score<=100:scores.append(score)ifnotscores:print("未录入有效成绩")else:total=sum(scores)count=len(scores)avg=total/countmax_s=max(scores)min_s=min(scores)print(f"学生人数:{count}")print(f"平均分:{avg:.2f}")print(f"最高分:{max_s}")print(f"最低分:{min_s}")4.for+range打印金字塔星号(n=5)n=5foriinrange(1,n+1):print("*"*i)5.循环判断质数n=int(input("请输入一个整数:"))#小于2不是质数ifn<2:print("No")else:is_prime=Trueforiinrange(2,int(n**0.5)+1):ifn%i==0:is_prime=Falsebreakprint("Yes"ifis_primeelse"No")习题5一、选择题1.下列关于序列类型的说法中正确的是()。A.所有序列都是可变的 B.序列中的元素必须是同类型C.序列是按顺序存储多个元素的数据结构 D.字典(dict)也是序列类型2.设list1=[10,20,30],表达式list1[1]的值是()。A.10 B.20 C.30 D.报错3.要访问列表中连续的多个元素(获得子列表),应该使用()。A.复制 B.切片 C.遍历 D.查询4.下列哪一个操作会改变列表本身()。A.list1+list2 B.list1*3 C.list1.append(5) D.list1[1]5.关于删除列表元素,以下功能与.remove(x)等价的是()。A.删除索引为x的元素 B.删除列表中第一次出现的值xC.删除所有等于x的元素 D.删除最后一个元素6.list1=[1,2,3];list2=list1的结果是()。A.复制了一个新列表 B.list1与list2是完全独立的C.两个变量引用同一个列表对象 D.list2是list1的值复制7.关于元组,下列说法不正确的是()。A.元组是不可变类型 B.元组可作为字典的键C.元组支持索引访问 D.元组可使用append()添加元素二、编程题1.输入5个整数存入列表,分别输出:列表本身、最大值、最小值、平均值。2.给定列表nums=[10,20,30,40,50,60],请输出:前3个元素、最后3个元素、索引1~4的子列表。3.创建一个列表[1,2,3],按以下顺序操作:(1)在末尾添加4。(2)在索引1处插入100。(3)删除值为3的元素。(4)将索引0的元素改为99。(5)输出修改后的列表。4.输入两个整数,返回一个包含这两个整数的元组,同时交换元组中两个元素的位置并输出。一、选择题答案及解析答案:C解析:序列是有序存储元素的结构;字符串、元组属于不可变序列,元素可不同类型,字典不属于序列。答案:B解析:列表索引从0开始,list1[1]取第二个元素20。答案:B解析:切片语法可截取列表中连续元素,生成子列表。答案:C解析:append()原地修改列表;+、*生成新列表,索引取值仅读取数据。答案:B解析:remove(x)只会删除列表中第一个值为x的元素。答案:C解析:Python中直接赋值是引用传递,两个变量指向同一个列表对象。答案:D解析:元组不可变,没有append()、remove()等修改元素的方法。二、编程题(Python代码)1.输入5个整数,输出列表、最值、平均值#录入5个整数num_list=[]foriinrange(5):n=int(input(f"请输入第{i+1}个整数:"))num_list.append(n)max_num=max(num_list)min_num=min(num_list)avg=sum(num_list)/len(num_list)print("列表:",num_list)print("最大值:",max_num)print("最小值:",min_num)print("平均值:",avg)2.列表切片取值nums=[10,20,30,40,50,60]print("前3个元素:",nums[:3])print("最后3个元素:",nums[-3:])print("索引1~4子列表:",nums[1:5])3.列表增删改操作lst=[1,2,3]lst.append(4)#末尾添加4lst.insert(1,100)#索引1处插入100lst.remove(3)#删除值为3的元素lst[0]=99#修改索引0元素为99print("修改后的列表:",lst)4.元组创建与元素交换a=int(input("请输入第一个整数:"))b=int(input("请输入第二个整数:"))t=(a,b)print("原元组:",t)#交换元素位置t_swap=(t[1],t[0])print("交换后元组:",t_swap)习题6一、选择题1.下列哪一个字符串包含换行符?()A."Hello\nWorld" B.r"Hello\nWorld" C."Hello\\nWorld" D."Hello/nWorld"2.下列哪种写法能够生成原始字符串?()A.raw"abc\n" B.r"abc\n" C."r"+"abc\n" D."abc\n"r3.若s="Python",表达式s[2:5]的结果是()。A."tho" B."yth" C."ytho" D."tho"4.下列关于字符串拼接的说法错误的是()。A."a"+"b"=="ab" B."a"*3=="aaa"C.字符串拼接会产生新的字符串 D.字符串拼接可以改变原字符串内容5."abc123".isdigit()的返回值是()。A."True" B."False" C.True D.False6.对于f"{3.1415926:.2f}"的输出是()。A."3.14" B."3.1416" C."3.15" D."3.1"二、编程题1.输入一个字符串,输出其首字符和末字符。要求:字符串长度至少为1。2.输入一个句子,统计空格数量。3.输入邮箱地址,检查是否包含'@'字符,输出判断结果。4.输入一个字符串,将其中的所有数字删除后输出。提示:可以使用str.isdigit()或替换。5.输入一个包含多个单词的字符串,按空格拆分后逐行输出每个单词。6.输入一个字符串,统计其中出现次数最多的字符及次数。一、选择题答案及解析答案:A解析:\n是换行转义字符;原始字符串r""会取消转义,\\n会原样显示\n,/n不是换行符。答案:B解析:Python原始字符串语法为r""/R"",其余写法均不合法。答案:A解析:字符串切片[起始:结束]左闭右开,s="Python",s[2:5]取索引2、3、4,结果为"tho"。答案:D解析:字符串是不可变类型,拼接只会生成新字符串,无法修改原字符串。答案:D解析:isdigit()判断是否全为数字,abc123包含字母,返回布尔值False。答案:A解析::.2f表示保留两位小数,3.1415926格式化后为3.14。二、编程题(Python代码)1.输出字符串首、末字符s=input("请输入字符串:")print("首字符:",s[0])print("末字符:",s[-1])2.统计句子中空格数量sentence=input("请输入句子:")space_num=sentence.count("")print("空格数量:",space_num)3.检查邮箱是否包含@email=input("请输入邮箱地址:")if"@"inemail:print("邮箱包含@字符")else:print("邮箱不包含@字符")4.删除字符串中所有数字s=input("请输入字符串:")new_s=""forcharins:ifnotchar.isdigit():new_s+=charprint("去除数字后:",new_s)5.按空格拆分单词并逐行输出words=input("请输入多个单词,以空格分隔:").split()forwinwords:print(w)6.统计出现次数最多的字符及次数s=input("请输入字符串:")max_count=0max_char=""forcins:cnt=s.count(c)ifcnt>max_count:max_count=cntmax_char=cprint(f"出现次数最多的字符:{max_char},次数:{max_count}")习题7一、选择题1.下列关于字典的描述正确的是()。A.字典中的元素有序排列 B.字典的键必须唯一且不可变C.字典可以通过索引访问元素 D.字典只能存储字符串类型的值2.向字典中添加新元素使用的方法是()。A.dict.append() B.dict.add()C.dict[key]=value D.dict.insert(key,value)3.删除字典中指定键及其值的正确方法是()。A.deldict[key] B.dict.remove(key)C.dict.popitem(key) D.dict.clear(key)4.下列哪种方法可以合并两个字典?()A.dict1.update(dict2) B.dict1.append(dict2)C.dict1+dict2 D.dict1.merge(dict2)5.关于字典嵌套,下列说法正确的是()。A.字典不能作为字典的值 B.字典的键可以是列表C.字典可以嵌套另一个字典作为值 D.字典嵌套后无法遍历6.下列字典推导式写法正确的是()。A.{x:x**2forxinrange(5)} B.{x=>x**2forxinrange(5)}C.{x->x**2inrange(5)} D.{x,x**2forxinrange(5)}二、编程题1.创建一个字典,存储三名学生的姓名和成绩,并打印整个字典。2.向上题的字典中添加一名学生的成绩,然后打印更新后的字典。3.修改字典中某个学生的成绩,并打印结果。4.删除字典中一名学生的记录,并打印更新后的字典。5.遍历字典,输出每个学生的姓名和成绩。6.合并两个字典,例如:dict1={"张三":85},dict2={"李四":90},并打印合并后的字典。一、选择题(答案+解析)答案:B解析:字典键唯一、必须是不可变类型;字典无索引、无序,值可以是任意类型。答案:C解析:字典添加/修改元素语法字典[键]=值;字典无append、insert、add方法。答案:A解析:del字典[键]删除指定键值对;popitem()随机/末尾删除,clear()清空整个字典,字典无remove方法。答案:A解析:update()可将一个字典合并到另一个字典;字典不支持+、append、merge。答案:C解析:字典可以嵌套字典作为值;列表是可变类型,不能做字典的键,嵌套字典依然可以遍历。答案:A解析:字典推导式标准格式{键:值for变量in可迭代对象},Python不使用=>、->。二、编程题(Python代码)1.创建学生成绩字典并打印#创建字典stu_dict={"小明":90,"小红":88,"小刚":95}print("学生成绩字典:",stu_dict)2.添加新学生并打印stu_dict={"小明":90,"小红":88,"小刚":95}#添加元素stu_dict["小丽"]=92print("添加学生后:",stu_dict)3.修改学生成绩stu_dict={"小明":90,"小红":88,"小刚":95}#修改指定学生成绩stu_dict["小红"]=96print("修改成绩后:",stu_dict)4.删除学生记录stu_dict={"小明":90,"小红":88,"小刚":95}#删除指定键值对delstu_dict["小刚"]print("删除学生后:",stu_dict)5.遍历字典,输出姓名和成绩python运行stu_dict={"小明":90,"小红":88,"小刚":95}forname,scoreinstu_dict.items():print(f"姓名:{name},成绩:{score}")6.合并两个字典dict1={"张三":85}dict2={"李四":90}#合并字典dict1.update(dict2)print("合并后的字典:",dict1)习题8一、选择题1.下列关于集合的描述正确的是()。A.集合中的元素有序排列 B.集合中的元素可以重复C.集合中的元素必须是可哈希类型 D.集合中的元素可以通过索引访问2.创建一个空集合的正确方式是()。A.s={} B.s=set() C.s=[] D.s=()3.向集合中添加元素的方法是()。A.s.add(elem) B.s.append(elem)C.s.insert(elem) D.s.update(elem)4.删除集合中指定元素且不存在时不会报错的方法是()。A.s.remove(elem) B.s.pop()C.s.discard(elem) D.s.clear()5.以下集合运算中,返回两个集合共同元素的是()。A.并集 B.交集 C.差集 D.对称差集6.集合运算A-B的含义是()。A.A和B的交集 B.A中有B中没有的元素C.B中有A中没有的元素 D.A和B中所有不同元素7.判断集合A是否为集合B的子集,正确表达式是()。A.AinB B.A<=B C.A<B D.A==B8.下列类型转换中不合法的是()。A.list(s)将集合转换为列表 B.tuple(s)将集合转换为元组C.set("abc")将字符串转换为集合 D.dict(s)将集合直接转换为字典二、编程题1.创建一个包含5个整数的集合,并打印集合。2.向集合中添加两个新元素,并打印更新后的集合。3.删除集合中的一个元素,使用discard()方法并打印结果。4.遍历集合,打印每个元素的平方值。5.创建两个集合,求它们的并集、交集、差集和对称差集。6.判断一个集合是否为另一个集合的子集或超集,并打印结果。一、选择题答案+解析答案:C解析:集合无序、元素唯一,不能用索引访问;元素必须是不可变(可哈希)类型。答案:B解析:{}是空字典,set()才是空集合;[]列表,()元组。答案:A解析:add()单次添加一个元素;append/insert是列表方法;update()批量添加。答案:C解析:discard()元素不存在也不报错;remove()不存在会报错;pop()随机删除;clear()清空集合。答案:B解析:交集就是两个集合共有的元素。答案:B解析:A-B表示差集,取在A中、但不在B中的元素。答案:B解析:A<=B判断A是B的子集;A<B判断真子集。答案:D解析:集合只有单个元素,无法直接转为键值对形式的字典。二、编程题(Python代码)1.创建含5个整数的集合并打印s={1,3,5,7,9}print("集合:",s)2.添加两个新元素s={1,3,5,7,9}s.add(2)s.add(4)print("添加元素后:",s)3.使用discard()删除元素s={1,3,5,7,9}s.discard(5)#删除元素5print("删除元素后:",s)4.遍历集合,输出每个元素的平方s={2,4,6,8}fornumins:print(num**2)5.求两个集合的并集、交集、差集、对称差集a={1,2,3,4,5}b={4,5,6,7,8}print("并集:",a|b)print("交集:",a&b)print("a-b差集:",a-b)print("b-a差集:",b-a)print("对称差集:",a^b)6.判断子集、超集a={1,2,3}b={1,2,3,4,5}print("a是b的子集:",a<=b)print("b是a的超集:",b>=a)print("a是b的真子集:",a<b)习题9一、选择题1.下列关于函数的描述正确的是()。A.函数一定有返回值 B.函数可以重复使用,提高代码复用性C.函数只能定义在程序开头 D.函数的参数必须全部是数字2.定义一个函数的关键字是()。A.define B.function C.def D.lambda3.下列调用函数时,传递参数方式错误的是()。A.func(10,20)(位置参数) B.func(x=10,y=20)(关键字参数)C.func([10,20])(序列解包) D.func(z=30,40)(混合错误)4.关于函数返回值,下列说法正确的是()。A.一个函数只能返回一个值 B.return语句可以返回多个值(返回元组)C.函数没有return语句时,返回0 D.函数必须在最后一行使用return5.局部变量与全局变量的区别是()。A.局部变量作用于整个程序 B.全局变量只能在函数内使用C.局部变量在函数执行结束后消失 D.全局变量不能在函数内访问6.下列语句关于递归函数的说法正确的是()。A.递归函数必须有结束条件 B.递归函数不能调用自身C.所有函数都可以无限递归而不会出错 D.递归函数不能返回值7.关于lambda函数,下列说法正确的是()。A.lambda函数必须有函数名 B.lambda函数可以包含多条语句C.lambda函数返回值是表达式结果 D.lambda函数不能作为参数传递二、编程题1.定义一个函数greet(),打印“Hello,Python!”并调用它。2.定义一个函数add(a,b),返回两个数的和,并调用该函数计算10和20的和。3.定义一个函数,接收任意数量的位置参数,返回它们的平均值。4.编写一个函数,接收一个字典作为参数,返回字典中最大值对应的键。5.编写一个函数,使用递归计算给定整数的阶乘。6.定义一个lambda函数,计算输入数的平方,并测试其功能。7.编写函数,判断输入列表中的元素是否全部为偶数,返回布尔值。8.编写函数,接收两个集合参数,返回它们的并集、交集、差集。一、选择题(答案+解析)答案:B解析:函数可复用代码;函数不一定有返回值、定义位置不限、参数类型无限制。答案:C解析:Python使用def定义普通函数,lambda用于匿名函数。答案:C解析:关键字参数不能写在位置参数前面;序列解包需用*,func([10,20])只是传一个列表参数,并非解包用法。答案:B解析:return可返回多个值,自动封装为元组;无return时默认返回None。答案:C解析:局部变量仅在函数内生效,函数执行完毕后销毁;全局变量整个程序都可访问。答案:A解析:递归函数必须设置终止条件,否则无限递归会报错;递归本质就是函数调用自身。答案:C解析:lambda是匿名函数,只能写一条表达式,自动返回表达式结果,可当作参数传递。二、编程题(Python代码)1.定义并调用greet()函数defgreet():print("Hello,Python!")greet()2.求和函数add(a,b)defadd(a,b):returna+bres=add(10,20)print("10+20=",res)3.接收任意位置参数,求平均值defavg(*args):returnsum(args)/len(args)print(avg(1,2,3))print(avg(10,20,30,40))4.传入字典,返回最大值对应的键defget_max_key(d):returnmax(d,key=d.get)dic={"语文":88,"数学":95,"英语":90}print("最大值对应的键:",get_max_key(dic))5.递归实现阶乘deffactorial(n):ifn==0orn==1:return1returnn*factorial(n-1)num=5print(f"{num}的阶乘=",factorial(num))6.lambda函数求平方square=lambdax:x**2print(square(5))print(square(9))7.判断列表元素是否全为偶数defall_even(lst):foriinlst:ifi%2!=0:returnFalsereturnTrueprint(all_even([2,4,6]))print(all_even([2,3,6]))8.传入两个集合,返回并集、交集、差集defset_calc(s1,s2):union=s1|s2inter=s1&s2diff=s1-s2returnunion,inter,diffa={1,2,3,4}b={3,4,5,6}u,i,d=set_calc(a,b)print("并集:",u)print("交集:",i)print("a相对于b的差集:",d)习题10一、选择题1.下列关于“类”和“对象”的描述,正确的是()。A.类是具体事物,对象是抽象概念 B.类是对象的实例C.对象是类的实例 D.类和对象是完全相同的概念2.在类的方法定义中,第一个参数通常为self,它的作用是()。A.表示全局变量 B.表示当前模块名C.表示类本身 D.表示当前对象3.下列哪项体现了“封装”的理念?()A.使用多个类组织代码 B.通过方法访问和修改对象属性C.不编写类也能进行面向对象编程 D.将多个对象放在列表中4.下列关于继承的说法正确的是()。A.子类只能继承父类的方法,不能继承属性B.子类自动继承父类的属性和方法C.父类必须继承子类D.Python不支持继承5.在子类中重写父类方法的目的通常是()。A.删除父类所有功能 B.隐藏父类的数据属性C.扩展或改变父类方法的行为 D.让两个类完全无关6.使用super()的主要目的是()。A.创建新对象 B.在类外访问私有属性C.调用父类的方法 D.删除父类代码二、编程题1.在类Rectangle中定义方法计算矩形面积和周长,创建对象并输出结果。2.定义一个类Car,包含品牌(brand)和速度(speed)属性,提供方法accelerate()和brake(),实现加速与减速功能。3.定义一个类Counter,内部包含私有属性__count,并提供方法increment()和get_count()实现封装访问。4.定义父类Animal,包含方法speak();再定义子类Dog和Cat重写speak()方法,并演示多态效果。5.使用super()完善一个继承结构:定义父类Person,子类Teacher在__init__中调用父类构造方法并新增科目属性。6.定义一个类Book,实现__str__方法,使得打印对象时能显示“书名:XXX,作者:YYY”。7.综合练习:编写一个简易学生管理系统类StudentManager,支持:添加学生、删除学生、查询学生、打印所有学生信息,要求学生信息用字典或对象存储均可。一、选择题答案+解析答案:C解析:类是抽象模板,对象是类创建出的实例。答案:D解析:self代表当前实例对象,是类中方法的第一个形参。答案:B解析:封装核心是隐藏属性,通过公开方法操作属性,控制访问。答案:B解析:子类会自动继承父类所有公有属性和方法,Python支持继承。答案:C解析:方法重写是在子类中重新实现方法,用来拓展/改写原有逻辑。答案:C解析:super()用于在子类中调用父类的构造方法或普通方法。二、编程题(Python完整代码)1.矩形类:计算面积、周长classRectangle:def__init__(self,width,height):self.width=widthself.height=height#计算面积defget_area(self):returnself.width*self.height#计算周长defget_perimeter(self):return2*(self.width+self.height)#创建对象并测试rect=Rectangle(3,5)print("矩形面积:",rect.get_area())print("矩形周长:",rect.get_perimeter())2.汽车类:加速、减速classCar:def__init__(self,brand,speed=0):self.brand=brandself.speed=speed#加速defaccelerate(self,num):self.speed+=numprint(f"{self.brand}加速,当前速度:{self.speed}")#减速defbrake(self,num):#速度不小于0self.speed=max(0,self.speed-num)print(f"{self.brand}减速,当前速度:{self.speed}")#测试car1=Car("比亚迪")car1.accelerate(40)car1.brake(15)car1.brake(30)3.计数器类(私有属性+封装)classCounter:def__init__(self):self.__count=0#私有属性#计数自增defincrement(self):self.__count+=1#获取私有属性值defget_count(self):returnself.__count#测试c=Counter()c.increment()c.increment()print("当前计数:",c.get_count())4.父类Animal+子类Dog、Cat,实现多态classAnimal:defspeak(self):passclassDog(Animal):defspeak(self):print("汪汪汪")classCat(Animal):defspeak(self):print("喵喵喵")#多态演示defanimal_speak(ani):ani.speak()dog=Dog()cat=Cat()animal_speak(dog)animal_speak(cat)5.继承+super()调用父类构造方法classPerson:def__init__(self,name,age):=nameself.age=ageclassTeacher(Person):def__init__(self,name,age,subject):#调用父类构造方法super().__init__(name,age)self.subject=subject#子类新增属性defshow_info(self):print(f"姓名:{},年龄:{self.age},任教科目:{self.subject}")#测试t=Teacher("张老师",38,"数学")t.show_info()6.重写str方法classBook:def__init__(self,title,author):self.title=titleself.author=author#重写字符串方法def__str__(self):returnf"书名:{self.title},作者:{self.author}"#测试b=Book("Python编程","李四")print(b)7.简易学生管理系统类classStudentManager:def__init__(self):self.student_list=[]#存储学生字典#添加学生defadd_student(self,name,sid,score):stu={"name":name,"sid":sid,"score":score}self.student_list.append(stu)print("添加学生成功")#删除学生(按学号删除)defdel_student(self,sid):forstuinself.student_list:ifstu["sid"]==sid:self.student_list.remove(stu)print("删除学生成功")returnprint("未找到该学生")#查询学生(按学号)defquery_student(self,sid):forstuinself.student_list:ifstu["sid"]==sid:print(f"姓名:{stu['name']},学号:{stu['sid']},成绩:{stu['score']}")returnprint("未找到该学生")#打印所有学生defshow_all(self):ifnotself.student_list:print("暂无学生信息")returnprint("=====所有学生信息=====")forstuinself.student_list:print(f"姓名:{stu['name']},学号:{stu['sid']},成绩:{stu['score']}")#测试manager=StudentManager()manager.add_student("小明","001",92)manager.add_student("小红","002",88)manager.show_all()manager.query_student("001")manager.del_student("002")manager.show_all()习题11一、选择题1.下列关于“错误(Error)”和“异常(Exception)”的说法正确的是()。A.错误与异常没有区别B.异常通常可以被程序处理,而错误一般无法恢复C.异常是指语法错误D.错误是指运行中产生的小问题2.当需要捕获多个异常类型时,应将多个异常放在()。A.一个except中的集合里,如except{ValueError,TypeError}B.多个except分支中C.一个except中用“and”连接D.一个try中嵌套多个try3.若需要让程序无论是否发生异常都执行某段代码,应使用()。A.try-except B.try-except-else C.try-finally D.raise4.用于获取异常详细信息(如错误提示文本)的写法正确的是:A.exceptExceptionasmsg: B.exceptmsg:C.tryasmsg: D.raisemsg5.下列关于异常传播机制的说法正确的是()。A.异常只会在当前函数内部查找except B.异常会沿着调用栈逐层向外传播C.异常不会离开当前语句块 D.捕获异常后仍继续向上传播6.以下语句用于主动抛出异常的是()。A.throw B.raise C.except D.error二、编程题1.编写程序,让用户输入一个整数,使用try-except捕获非整数输入的异常,并提示“请输入整数!”。2.编写函数safe_div(a,b),使用try-except捕获除零异常,并返回“除数不能为0”。3.编写程序,捕获用户输入列表索引非法(IndexError)的情况,并输出提示信息。4.编写函数,实现:接收一个列表,若列表中有非数字元素则主动使用raiseValueError抛出异常。5.定义一个自定义异常类PasswordError,在用户输入密码过短(少于6位)时抛出该异常。6.综合练习:编写一个简单计算器,支持+、-、*、/。要求对以下情况进行异常处理:输入格式错误、不支持的运算符、除零错误,并给出友好的错误提示。一、选择题答案+解析答案:B解析:语法错误属于错误,程序无法运行;异常是运行时问题,可通过try-except捕获处理。答案:B解析:捕获多个异常可写多个独立except分支,或在一个except中用元组包裹异常类型,不能用集合、and。答案:C解析:finally块无论是否触发异常,一定会执行;else是无异常时执行。答案:A解析:标准写法except异常类型as变量:,变量用于接收异常描述信息。答案:B解析:异常未被捕获时,会沿着函数调用栈逐层向外传播;一旦被捕获,停止传播。答案:B解析:Python使用raise主动抛出异常,无throw关键字。二、编程题(Python代码)1.捕获非整数输入异常try:num=int(input("请输入一个整数:"))print(f"你输入的整数是:{num}")exceptValueError:print("请输入整数!")2.安全除法,捕获除零异常defsafe_div(a,b):try:returna/bexceptZeroDivisionError:return"除数不能为0"#测试print(safe_div(10,2))print(safe_div(8,0))3.捕获列表索引越界异常lst=[10,20,30,40]try:idx=int(input("请输入列表索引:"))print("对应元素:",lst[idx])exceptIndexError:print("索引非法,超出列表范围!")exceptValueError:print("请输入数字格式的索引!")4.列表含非数字元素则主动抛异常defcheck_num_list(lst):foriteminlst:#判断是否为数字ifnotisinstance(item,(int,float)):raiseValueError("列表中存在非数字元素")print("列表全部为数字元素")#测试try:check_num_list([1,2.5,3])check_num_list([1,"a",3])exceptValueErrorase:print(e)5.自定义异常:密码长度不足抛PasswordError#定义自定义异常类classPasswordError(Exception):passtry:pwd=input("请输入密码:")iflen(pwd)<6:raisePasswordError("密码长度不能少于6位!")print("密码格式合法")exceptPasswordErrorase:print(e)6.简易计算器(综合异常处理)defcalculator():try:num1=float(input("请输入第一个数字:"))op=input("请输入运算符(+、-、*、/):")num2=float(input("请输入第二个数字:"))ifop=="+":res=num1+num2elifop=="-":res=num1-num2elifop=="*":res=num1*num2elifop=="/":res=num1/num2else:#运算符非法主动抛异常raiseException("不支持该运算符!")print(f"计算结果:{res}")exceptValueError:print("输入格式错误,请输入有效数字!")exceptZeroDivisionError:print("错误:除数不能为0!")exceptExceptionase:print(e)calculator()习题12一、选择题1.下列关于文件路径的说法中,正确的是()。A.Windows中的路径分隔符只能写成""B.Linux系统不能使用相对路径C."./data/file.txt"表示当前目录下的data文件夹中的file.txtD.绝对路径和相对路径没有区别2.关于open()函数,下列说法正确的是()。A.open()打开文件失败时返回NoneB.open(file,mode='r')表示以二进制写入模式打开文件C.open()默认编码是UTF-32D.open(file,'r')表示以文本读取方式打开文件3.下列哪项不会自动关闭文件?()A.close() B.withopen(...)asfC.程序结束自动回收 D.变量被重新赋值后原文件自动关闭4.关于read()、readline()、readlines()下列说法正确的是()。A.read()一次只读一行 B.readline()一次读取全部内容C.readlines()返回一个字符串列表 D.这三个方法功能完全相同5.文件指针位置可以通过下列哪组方法控制?()。A.tell()与seek() B.read()与write() C.open()与close() D.input()与print()6.下列哪项关于JSON数据格式的描述是正确的?()A.JSON仅支持整数类型 B.JSON中对象对应Python中的dictC.JSON不支持嵌套结构 D.JSON文件必须以.js为后缀二、编程题1.读取文本文件story.txt内容,逐行打印内容,并打印行号。2.统计文本文件字符数、单词数和行数。提示:用空格分隔单词。3.读取文件,统计出现次数最多的单词,忽略大小写与标点,如“Hello”与“hello”视为同一个单词。4.将一个列表写入文件(每个元素一行):names=["Alice","Bob","Charlie"],写入names.txt。5.反向读取文件内容,将文件中的所有行倒序输出至屏幕。6.使用pathlib模块找出某个文件夹中所有.txt文件并打印其绝对路径。7.读取CSV文件,打印每行的第2列,若某行列数不足2,则跳过。8.将一个Python字典保存为JSON文件。例如:data={"name":"Tom","age":20,"courses":["Math","Python"]}写入data.json。然后读取这个JSON文件并使用缩进indent=4打印格式化后的JSON数据。一、选择题答案+解析答案:C解析:Windows路径可写\或/;所有系统都支持相对路径;绝对、相对路径概念不同。答案:D解析:r是文本只读模式;打开失败会抛异常,默认编码不是UTF-32,w才是写入模式。答案:D解析:文件对象重新赋值不会自动关闭文件;close()、with语句、程序结束都会关闭文件。答案:C解析:read()读取全部内容;readline()读取一行;readlines()按行读取,返回字符串列表。答案:A解析:tell()获取文件指针位置,seek()移动文件指针。答案:B解析:JSON支持多种类型、可嵌套;JSON文件后缀一般为.json,JSON对象对应Python字典。二、编程题(Python代码)1.读取文件,逐行打印并输出行号withopen("story.txt","r",encoding="utf-8")asf:foridx,lineinenumerate(f,start=1):print(f"第{idx}行:{line.strip()}")2.统计文件行数、单词数、字符数(空格分隔单词)withopen("story.txt","r",encoding="utf-8")asf:content=f.read()lines=content.splitlines()line_count=len(lines)char_count=len(content)#按空格分割统计单词word_list=content.split()word_count=len(word_list)print(f"行数:{line_count}")print(f"字符数:{char_count}")print(f"单词数:{word_count}")3.统计出现次数最多的单词(忽略大小写、标点)importstringwithopen("story.txt","r",encoding="utf-8")asf:text=f.read()#去除标点、转小写trans=str.maketrans("","",string.punctuation)text=text.translate(trans).lower()words=text.split()word_dict={}forwinwords:word_dict[w]=word_dict.get(w,0)+1#取次数最多的单词max_word=max(word_dict,key=word_dict.get)max_num=word_dict[max_word]print(f"出现最多的单词:{max_word},次数:{max_num}")4.列表逐行写入names.txtnames=["Alice","Bob","Charlie"]withopen("names.txt","w",encoding="utf-8")asf:fornameinnames:f.write(name

温馨提示

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

评论

0/150

提交评论