Python程序设计-试卷二及答案_第1页
Python程序设计-试卷二及答案_第2页
Python程序设计-试卷二及答案_第3页
Python程序设计-试卷二及答案_第4页
Python程序设计-试卷二及答案_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

《Python程序设计》期末考试试卷(二)课程名称:Python程序设计

适用专业:计算机相关专业

考试形式:闭卷笔试

考试时间:120分钟

总分:100分一、单项选择题(共20题,每题2分,共40分)下列哪个Python开发工具是本课程主要推荐的?A.EclipseB.VisualStudioCodeC.Notepad++D.PyCharm表达式5%2和2**3的结果分别是:A.2和8B.1和8C.2.5和6D.1和6想要在循环中提前终止整个循环,应使用哪个语句?A.passB.continueC.breakD.return将数字字符串"123"转换为整数,正确的函数是:A.str()B.int()C.float()D.eval()以下哪个语句可以生成一个从0到4(不包括5)的整数序列?A.range(5)B.range(1,5)C.range(0,5,1)D.以上都对已知列表a=[1,2,3],执行b=a和a.append(4)后,b的值是:A.[1,2,3]B.[1,2,3,4]C.[4]D.报错元组(1,2)和列表[1,2]最显著的区别是:A.存储的数据类型不同B.元组是序列,列表不是C.元组不可变,列表可变D.元组不能索引访问关于字典d={'name':‘Alice‘,‘age‘:25},下列操作错误的是:A.d[‘name‘]B.d[‘city‘]=‘Beijing‘C.d.get(‘age‘)D.d.pop()(不带参数)用于创建一个空集合的语句是:A.{}B.set()C.[]D.()以下代码的输出结果是:deffunc(a,b=2):returna*bprint(func(3,5)+func(3))A.15B.21C.11D.报错lambda表达式的典型特征是:A.可以定义复杂的多行函数B.必须有一个名字C.是匿名函数,简洁D.不能有返回值在类的方法定义中,哪一个参数必须作为第一个参数,代表实例本身?A.clsB.selfC.thisD.没有强制要求通过继承,子类可以:A.继承父类的所有私有属性和方法B.只能继承父类的公开方法C.继承父类的非私有属性和方法,并可进行扩展D.必须重写父类的所有方法以只读方式打开一个文本文件,并处理中文,正确的open语句是:A.open(‘file.txt‘)B.open(‘file.txt‘,‘w‘)C.open(‘file.txt‘,‘r‘,encoding=‘utf-8‘)D.open(‘file.txt‘,‘rb‘)使用withopen(...)asf:语句操作文件的主要优势是:A.读写速度更快B.可以打开多个文件C.自动处理文件的打开和关闭D.能处理二进制文件如果文件myfile.txt不存在,执行open(‘myfile.txt‘,‘r‘)会引发哪种异常?A.PermissionErrorB.FileNotFoundErrorC.IOErrorD.IsADirectoryError在SQLite中,用于向表中插入新记录的命令是:A.INSERTINTOB.UPDATEC.SELECTD.CREATE在Pandas中,要从一个名为df的DataFrame中筛选出“年龄”列大于18的所有行,应使用:A.df[‘age‘]>18B.df[df.age>18]C.df.loc[df[‘age‘]>18]D.B和C都对正则表达式r‘\w+@\w+\.\w+‘最可能用于匹配什么?A.网址B.简单的电子邮件地址C.手机号D.IP地址NumPy的主要优势是提供了高效的多维数组对象,叫做:A.MatrixB.ArrayC.ndarrayD.Tensor二、判断题(共15题,每题1分,共15分)int(3.9)

的结果是4。()print(‘Hello‘,‘World‘,sep=‘-‘)

的输出是

Hello-World。()列表的

sort()

方法会返回一个新的排序后的列表,原列表不变。()字符串可以用

+

进行拼接,也可以用

*

进行重复。()在函数内部使用

globalx

声明后,就可以创建或修改一个全局变量

x。()字典的

keys()、values()

items()

方法返回的都是列表。()Python中,__init__.py

文件的存在标志着一个目录是一个Python包。()使用

super()

函数可以在子类中调用父类的方法。()pass

语句通常用于语法上需要一个语句,但程序什么也不做的场合。()读取一个大的CSV文件时,使用

csv.reader()

并逐行迭代通常比

pandas.read_csv()

更节省内存。()try

块后面必须至少跟一个

except

块。()Matplotlib的

plt.show()

函数用于显示所有已绘制的图形。()列表推导式

[iforiinrange(10)ifi%2==0]

生成的是一个包含偶数的列表。()使用

pathlib.Path(‘./data‘).mkdir()

可以创建名为

data

的目录。()Python内置的

sqlite3

模块连接数据库时,如果数据库文件不存在,会创建一个新的。()三、填空题(共15空,每空1分,共15分)在Python中,单行注释以符号开始。表达式

not(TrueandFalse)

的结果是。若

s=‘Python‘,则

s[::-1]

的结果是

。使用

list(range(1,10,2))

创建的列表是。定义函数时,在参数名前加一个可以接收任意数量的位置参数。集合常用于去除列表中的元素,例如

list(set([1,2,2,3]))

会得到

[1,2,3](顺序可能不同)。在类中,以双下画线开头和结尾的方法是。使用

json

模块的方法可以从JSON格式的字符串或文件中加载Python对象。读取文件时,f.readline()

方法会读取文件的

。SQL语句

DELETEFROMtable_nameWHEREcondition

用于记录。在Pandas中,df.isnull().sum()

常用于统计DataFrame中各列的数量。使用

plt.xlabel(‘Time‘)

可以为Matplotlib图表的设置标签。yield

关键字用于定义函数。使用

a,b=b,a

可以

两个变量的值。在

try...except...finally

结构中,finally

子句中的代码。四、程序填空题(共2段程序,10个空,每空1分,共10分)1.商品库存管理与查询(5空)#商品库存字典,键为商品ID,值为商品信息和库存量(元组)inventory={‘P001‘:(‘陶瓷杯‘,20.0,15),‘P002‘:(‘丝巾‘,150.0,8),‘P003‘:(‘笔记本‘,25.0,30),}#功能1:列出所有库存紧张的商品(库存<10)low_stock_items=[]forpid,infoininventory.items():name,price,stock=infoif______(1)______:#条件:库存小于10low_stock_items.append(______(2)______)#将商品ID和名称的元组加入列表print(‘库存紧张商品:‘,low_stock_items)#功能2:根据商品ID查询信息defquery_product(pid):product_info=inventory.______(3)______(pid,‘商品不存在‘)#使用get方法安全查询ifproduct_info!=‘商品不存在‘:name,price,stock=product_inforeturnf‘商品:{name},单价:{price},库存:{stock}‘else:returnproduct_info#功能3:更新库存(例如售出3个P001)pid_to_update=‘P001‘quantity_sold=3ifpid_to_updateininventory:name,price,stock=inventory[pid_to_update]new_stock=______(4)______#计算新库存量ifnew_stock>=0:#更新库存信息,注意元组不可变,需要整体替换inventory[pid_to_update]=(name,price,______(5)______)#填入新库存量print(f‘{name}库存已更新为:{new_stock}‘)else:print(‘库存不足!‘)else:print(‘商品ID不存在‘)2.文件操作与异常处理(5空)importjsonfrompathlibimportPathdefsave_user_profile(username,data):"""将用户资料保存为JSON文件"""profile_dir=Path(‘./user_profiles‘)#确保目录存在profile_dir.______(6)______(exist_ok=True)#使用mkdir方法,如果存在也不报错file_path=profile_dir/f‘{username}.json‘try:withopen(file_path,‘______(7)______‘,encoding=‘utf-8‘)asf:#以写入模式打开文件json.______(8)______(data,f,indent=4,ensure_ascii=False)#将数据字典写入文件print(f‘用户{username}的资料已保存。‘)returnTrueexceptIOErrorase:print(f‘保存文件时出错:{e}‘)returnFalsedefload_user_profile(username):"""从JSON文件加载用户资料"""file_path=Path(‘./user_profiles‘)/f‘{username}.json‘try:ifnotfile_path.______(9)______():#检查文件是否存在print(f‘用户{username}的资料文件不存在。‘)returnNonewithopen(file_path,‘r‘,encoding=‘utf-8‘)asf:user_data=json.______(10)______(f)#从文件加载JSON数据returnuser_dataexceptjson.JSONDecodeError:print(‘文件内容格式错误,不是有效的JSON。‘)returnNone#测试profile={‘name‘:‘张三‘,‘age‘:22,‘interests‘:[‘阅读‘,‘编程‘]}save_user_profile(‘zhangsan‘,profile)loaded=load_user_profile(‘zhangsan‘)print(‘加载的数据:‘,loaded)五、编程题(共2题,每题10分,共20分)1.数据清洗与格式化(10分)背景:从外部系统导入了“文创宝盒”的客户联系方式raw_contacts.txt,但数据混乱,每行可能包含空格、空行或不规则的电话号码(只考虑11位数字)。任务:编写函数

clean_contacts(input_file,output_file)。读取输入文件,忽略空行和纯空格行。对每一行,去除首尾空格。使用正则表达式

r‘\d{11}‘

搜索提取11位连续数字作为电话号码。如果找到,将该电话号码格式化输出,格式为

“138-xxxx-xxxx”(前3位,中间4位,后4位,用短横线连接)。将所有格式化后的电话号码写入输出文件,每行一个。在控制台打印处理的总行数和找到的有效电话号码数量。示例输入(raw_contacts.txt)内容:Alicob1391234567(无效行)Charlieavid手机号望输出(cleaned_contacts.txt)内容:1389876-5432151-0000-1111控制台输出:处理了5行,找到3个有效电话号码。2.面向对象设计:模拟简单的购物车(10分)背景:为“文创宝盒”设计一个简易的ShoppingCart类。任务:设计

Item

类,属性包括:item_id(商品ID,字符串)、name(名称)、price(单价,浮点数)。设计

ShoppingCart

类,属性为一个字典

self.items,用于存储商品(Item

对象)和对应的购买数量。为

ShoppingCart

类实现以下方法:add_item(item,quantity=1):向购物车添加商品。如果商品已存在,则增加数量;否则新增条目。quantity

应为正整数。remove_item(item_id,quantity=1):从购物车移除指定数量的商品。如果移除后数量为0,则删除该商品条目。quantity

应为正整数,且不应大于购物车中该商品的数量。calculate_total():计算并返回购物车中所有商品的总金额。display_cart():打印购物车内容,格式清晰(例如每行显示:商品ID,名称,单价,数量,小计)。在方法中进行必要的参数校验(如数量为正整数),使用

assert

语句或抛出

ValueError

异常。编写一段测试代码,创建几个

Item

对象和一辆

ShoppingCart,演示商品的添加、移除和总价计算《Python程序设计》期末考试试卷(二)答案课程名称:Python程序设计

适用专业:计算机相关专业

考试形式:闭卷笔试

考试时间:120分钟

总分:100分一、单项选择题(共20题,每题2分,共40分)B(解析:VisualStudioCode轻量、免费、插件丰富,是Python入门推荐工具;PyCharm功能强大,专业版收费;Eclipse主打Java开发;Notepad++是纯文本编辑器,无Python专属调试功能)B(解析:%是取模运算,5%2=1;**是幂运算,2**3=8)C(解析:break终止整个循环;continue跳过本次循环剩余代码;pass占位符,不执行任何操作;return用于函数返回值,终止函数执行)B(解析:int()转换为整数,str()转换为字符串,float()转换为浮点数,eval()执行字符串中的表达式)D(解析:range(5)等价于range(0,5),range(0,5,1)明确指定步长1,三者均生成[0,1,2,3,4])B(解析:b=a是引用赋值,b和a指向同一个列表对象,a.append(4)修改原列表,b也会同步变化)C(解析:元组和列表都是序列,都可索引访问,可存储任意数据类型;核心区别是元组不可变(创建后无法修改元素),列表可变)D(解析:d.pop()必须传入键参数,用于删除指定键值对;无参数会报错;d['name']访问指定键的值,d['city']='Beijing'添加新键值对,d.get('age')安全访问指定键的值)B(解析:{}创建空字典,set()创建空集合,[]创建空列表,()创建空元组)B(解析:func(3,5)传入两个参数,a=3、b=5,返回15;func(3)只传一个参数,b使用默认值2,返回6;总和为15+6=21)C(解析:lambda是匿名函数,只能写单行表达式,自动返回表达式结果,简洁高效,适合简单逻辑)B(解析:实例方法的第一个参数必须是self,代表当前实例对象;cls是类方法的第一个参数,代表类本身)C(解析:子类只能继承父类的非私有属性和方法(不以__开头),可重写或扩展父类方法,无需强制重写所有方法)C(解析:'r'是只读模式,encoding='utf-8'避免中文乱码;open('file.txt')未指定编码,可能出现中文乱码;'w'是写入模式;'rb'是二进制只读模式)C(解析:with语句的核心优势是上下文管理,自动关闭文件,避免手动调用close()导致的资源泄露,与读写速度、打开多个文件无关)B(解析:文件不存在时,只读模式打开会引发FileNotFoundError;PermissionError是权限不足;IOError是通用I/O错误;IsADirectoryError是将目录当作文件打开)A(解析:INSERTINTO插入新记录;UPDATE修改已有记录;SELECT查询数据;CREATE创建表/数据库)D(解析:df[df.age>18]和df.loc[df['age']>18]均可筛选出年龄大于18的行,功能等价;df['age']>18仅返回布尔值序列)B(解析:该正则匹配「字母/数字下划线+@+字母/数字下划线+.+字母/数字下划线」,符合简单电子邮件地址的格式)C(解析:NumPy的核心多维数组对象是ndarray;Matrix是矩阵对象(已不推荐);Array是Python内置列表;Tensor是PyTorch/TensorFlow中的张量对象)二、判断题(共15题,每题1分,共15分)×(解析:int()转换浮点数时直接截断小数部分,int(3.9)=3,不是四舍五入)√(解析:print()函数的sep参数指定多个输出内容之间的分隔符,默认是空格,此处设为'-',输出Hello-World)×(解析:列表sort()方法是原地排序,直接修改原列表,不返回新列表;sorted()函数会返回新的排序后的列表,原列表不变)√(解析:字符串+用于拼接,*用于重复,例如'a'+'b'='ab','a'*3='aaa')√(解析:global关键字声明后,函数内部可以修改或创建全局变量,否则会创建局部变量)×(解析:字典的keys()、values()、items()方法返回的是视图对象(不是列表),可迭代,实时反映字典的变化)√(解析:__init__.py文件标志该目录是Python包,用于初始化包、导入子模块等,Python3.3+可省略,但仍推荐保留)√(解析:super()函数用于在子类中调用父类的方法,避免硬编码父类名称,简化继承逻辑)√(解析:pass是空语句,用于语法上需要语句但无需执行任何操作的场景(如空函数、空类、空循环))√(解析:csv.reader()逐行迭代读取,不加载全部数据到内存,适合大文件;pandas.read_csv()会将全部数据加载到DataFrame中,占用内存较多)×(解析:try块后面可以跟finally块,不一定需要except块(用于只保证资源释放,不处理异常))√(解析:plt.show()是Matplotlib中显示图形的核心函数,会弹出窗口显示所有已绘制的图形)√(解析:该列表推导式遍历0-9,筛选出偶数,生成列表[0,2,4,6,8])√(解析:pathlib.Path('./data').mkdir()可以创建data目录,exist_ok=True可避免目录已存在时报错)√(解析:sqlite3模块连接数据库时,若指定的数据库文件不存在,会自动创建一个新的SQLite数据库文件)三、填空题(共15空,每空1分,共15分)#True(解析:TrueandFalse=False,notFalse=True)nohtyP(解析:s[::-1]是字符串逆序切片,步长为-1,从后往前读取所有字符)[1,3,5,7,9](解析:range(1,10,2)从1开始,步长2,到10结束(不包含10))*(解析:*args接收任意数量的位置参数,封装为元组)重复双下画线方法(或特殊方法或魔术方法)json.load()(解析:json.load()从文件加载JSON,json.loads()从字符串加载JSON)下一行(解析:f.readline()每次读取文件的一行,多次调用会依次读取后续行,直到文件末尾)删除缺失值(或空值)X轴(或横轴)生成器(解析:yield是生成器函数的核心关键字,生成器函数调用后返回生成器对象,按需生成数据)交换(解析:Python的解包赋值,无需临时变量即可交换两个变量的值)无论是否发生异常都会执行四、程序填空题(共10空,每空1分,共10分)1.商品库存管理与查询(5空)(1)stock<10(解析:判断库存是否小于10,筛选库存紧张商品)(2)(pid,name)(解析:将商品ID和名称封装为元组,加入库存紧张商品列表)(3)get(解析:字典get()方法安全查询,键不存在时返回指定默认值)(4)stock-quantity_sold(解析:原库存减去售出数量,计算新库存)(5)new_stock(解析:元组不可变,整体替换字典值,填入新计算的库存量)2.文件操作与异常处理(5空)(6)mkdir(解析:Path.mkdir()方法创建目录,exist_ok=True避免目录已存在时报错)(7)w(解析:'w'是写入模式,用于创建并写入文件,保存JSON数据)(8)dump(解析:json.dump()将Python字典写入JSON文件,json.dumps()将Python字典转换为JSON字符串)(9)exists(解析:Path.exists()方法判断文件/目录是否存在)(10)load(解析:json.load()从JSON文件加载数据,转换为Python字典)五、编程题(共2题,每题10分,共20分)第1题:数据清洗与格式化(核心参考代码)importredefclean_contacts(input_file,output_file):#初始化统计变量total_lines=0valid_count=0#存储格式化后的电话号码cleaned_phones=[]#读取输入文件withopen(input_file,"r",encoding="utf-8")asfr:forlineinfr:total_lines+=1#统计总处理行数#去除首尾空格clean_line=line.strip()#忽略空行和纯空格行ifnotclean_line:continue#正则提取11位连续数字phone_match=re.search(r'\d{11}',clean_line)ifphone_match:phone=phone_match.group()#格式化电话号码:138-xxxx-xxxxformatted_phone=f"{phone[:3]}-{phone[3:7]}-{phone[7:]}"cleaned_phones.append(formatted_phone)valid_count+=1#统计有效电话号码数量#将格式化后的电话号码写入输出文件withopen(output_file,"w",encoding="utf-8")asfw:forphoneincleaned_phones:fw.write(f"{phone}\n")#控制台打印统计信息print(f"处理了{total_lines}行,找到{valid_count}个有效电话号码。")#测试函数(需提前创建raw_contacts.txt)clean_contacts("raw_contacts.txt","cleaned_contacts.txt")第2题:面向对象设计:模拟简单的购物车(核心参考代码)#1.定义Item类classItem:def__init__(self,item_id,name,price):#参数校验:单价必须是正数ifnotisinstance(price,(int,float))orprice<=0:raiseValueError("单价必须是大于0的数字!")self.item_id=item_id=nameself.price=float(price)#2.定义ShoppingCart类classShoppingCart:def__init__(self):#初始化购物车:字典,键为Item对象,值为购买数量self.items={}#a)添加商品方法defadd_item(self,item,quantity=1):#参数校验:quantity必须是正整数ifnotisinstance(quantity,int)orquantity<=0:raiseValueError("购买数量必须是大于0的整数!")ifiteminself.items:#商品已存在,增加数量self.items[item]+=quantityelse:#商品不存在,新增条目self.items[item]=quantity#b)移除商品方法defremove_item(self,item_id,quantity=1):#参数校验:quantity必须是正整数ifnotisinstance(quantity,int)orquantity<=0:raiseValueError("移除数量必须是大于0的整数!")#查找对应商品target_item=Noneforiteminself.items.keys():ifitem.item_id==item_id:target_item=itembreakifnottarget_item:raiseValueError("购物车中不存在该商品!")#校验移除数量是否超过库存current_quantity=self.items[target_item]ifquantity>current_quantity:ra

温馨提示

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

评论

0/150

提交评论