版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
陕西国际商贸学院python期末考试题及答案一、单项选择题(每题2分,共20分)1.在Python3.11中,下列关于列表推导式的说法正确的是A.列表推导式内部不能使用if条件B.列表推导式会立即生成所有元素,占用内存与列表长度成正比C.列表推导式返回的是一个迭代器对象D.列表推导式中不能使用嵌套循环答案:B解析:列表推导式一次性生成完整列表,内存占用与长度成正比;A错,可使用if;C错,返回的是list;D错,可嵌套。2.下列代码运行后输出的结果是```pythondeffoo(x,lst=[]):lst.append(x)returnlstprint(foo(1),foo(2),foo(3,[]),foo(4))```A.[1][1,2][3][1,2,4]B.[1][1,2][3][3,4]C.[1][2][3][4]D.[1][1,2][1,2,3][1,2,3,4]答案:A解析:默认参数lst只在函数定义时创建一次,后续调用共享;第三次调用传入新列表,不影响默认lst。3.关于Python装饰器,以下说法错误的是A.装饰器本身必须是可调用对象B.使用functools.wraps可保留原函数元数据C.一个函数可同时被多个装饰器修饰,离函数定义最近的先执行D.装饰器只能用于函数,不能用于类答案:D解析:装饰器也可用于类,如@dataclass。4.下列关于字典推导式的写法,能正确生成{"A":1,"B":2,"C":3}的是A.{k:vfork,vinzip("ABC",range(1,4))}B.{chr(i+64):iforiinrange(1,4)}C.dict([(chr(i+64),i)foriinrange(1,4)])D.以上全部答案:D解析:三种写法均等价。5.在Python中,下列表达式值为True的是A.[]==FalseB.bool("0")==FalseC.0.1+0.2==0.3D.NoneisNone答案:D解析:A空列表不为False;B非空字符串为True;C浮点误差;Dis身份比较。6.下列关于生成器与迭代器的说法正确的是A.生成器是一次性对象,遍历后需重新创建B.迭代器必须实现__iter__与__next__C.生成器函数使用returnyield语法D.for循环无法直接遍历迭代器答案:A解析:生成器遍历后耗尽;B错,迭代器只需__next__;C错,用yield;D错,for可直接遍历迭代器。7.下列代码运行后x的值是```pythonx=1defouter():x=2definner():globalxx+=1inner()outer()print(x)```A.1B.2C.3D.报错答案:C解析:inner中声明globalx,修改的是模块级x,最终x=2→3。8.下列关于Python异常处理的说法正确的是A.finally块中的代码只有在无异常时才执行B.一个except子句可同时捕获多个异常类型C.raise语句后必须跟异常类,不能跟异常实例D.自定义异常必须继承BaseException答案:B解析:A错,finally始终执行;C错,可跟实例;D推荐继承Exception而非BaseException。9.下列关于Python内存管理的说法错误的是A.小整数池缓存范围通常为[-5,256]B.列表的append操作时间复杂度为O(1)C.循环引用一定导致内存泄漏D.gc模块可手动触发垃圾回收答案:C解析:循环引用可被分代回收检测并清理,不必然泄漏。10.下列关于Python类型注解的说法正确的是A.类型注解在运行时会被强制检查B.List[int]与list[int]完全等价C.使用from__future__importannotations可推迟注解求值D.类型注解无法用于变量,只能用于函数参数与返回值答案:C解析:A错,运行时不检查;B错,需从typing导入List;D错,变量也可注解。二、填空题(每空3分,共30分)11.表达式`sum(map(lambdax:x*x,range(1,6)))`的值为________。答案:5512.使用collections模块统计字符串s="abracadabra"中各字符出现次数,代码为________。答案:collections.Counter(s)13.将列表lst=[1,2,3,4,5]原地逆序,使用切片写法为________。答案:lst.reverse()或lst[:]=lst[::-1]14.在Python3.11中,使用match语句匹配列表首个元素为0且长度为3的写法为________。答案:case[0,_,_]:15.使用asyncio创建并发TCP服务器,需继承的基类为________。答案:asyncio.Protocol或asyncio.StreamReaderProtocol(任填一个)16.表达式`{1,2,3}^{3,4,5}`的结果为________。答案:{1,2,4,5}17.使用pandas读取Excel文件需调用的函数为________。答案:pandas.read_excel18.将UTC时间字符串"2023-12-01T08:00:00Z"转换为本地时间,需使用的模块为________。答案:datetime或pytz或zoneinfo(任填一个)19.使用with语句同时打开两个文件f1、f2的写法为________。答案:withopen('a.txt')asf1,open('b.txt')asf2:20.在Python中,实现单例模式常用的装饰器模板中,用于缓存实例的属性名通常为________。答案:_instance或__instance三、程序阅读题(每题6分,共30分)21.阅读程序写出输出结果:```pythonclassA:def__init__(self,v):self.v=vdef__radd__(self,other):returnother+self.v*10a=A(3)print(2+a)```答案:3222.阅读程序写出输出结果:```pythonimportitertoolsg=itertools.count(1,0.5)print([next(g)for_inrange(5)])```答案:[1,1.5,2.0,2.5,3.0]23.阅读程序写出输出结果:```pythondefgen():yield1return2g=gen()try:print(next(g))print(next(g))exceptStopIterationase:print(e.value)```答案:1224.阅读程序写出输出结果:```pythonfromfunctoolsimportlru_cache@lru_cache(maxsize=None)deff(n):returnnifn<2elsef(n-1)+f(n-2)print(f(5),f.cache_info().hits)```答案:5325.阅读程序写出输出结果:```pythonimportthreadingn=0defadd():globalnfor_inrange(100000):n+=1ts=[threading.Thread(target=add)for_inrange(2)]fortints:t.start()fortints:t.join()print(n)```答案:输出值小于等于200000的某个不确定值(竞态条件)四、编程题(共70分)26.(15分)文件处理需求:当前目录下存在score.txt,每行格式为"学号,姓名,语文,数学,英语",需计算每位学生的总分,并写入score_summary.txt,格式为"学号,姓名,总分",按总分降序排列。要求:使用csv模块,处理可能缺失的成绩(视为0),捕获并打印文件不存在异常。参考实现:```pythonimportcsv,osdefsummary(infile='score.txt',outfile='score_summary.txt'):try:withopen(infile,encoding='utf-8')asfin:reader=csv.reader(fin)rows=[]forsid,name,*scoresinreader:total=sum(int(sor0)forsinscores)rows.append((sid,name,total))rows.sort(key=lambdax:x[2],reverse=True)withopen(outfile,'w',encoding='utf-8',newline='')asfout:csv.writer(fout).writerows(rows)exceptFileNotFoundError:print('文件不存在')if__name__=='__main__':summary()```27.(15分)面向对象设计一个`Vector2D`类,支持加减、模长、与标量乘除、迭代、相等判断、字符串表示`(x,y)`。要求使用`__slots__`节省内存,支持链式调用。参考实现:```pythonimportmathclassVector2D:__slots__=('x','y')def__init__(self,x=0,y=0):self.x,self.y=x,ydef__add__(self,other):returnVector2D(self.x+other.x,self.y+other.y)def__sub__(self,other):returnVector2D(self.x-other.x,self.y-other.y)def__mul__(self,k):returnVector2D(self.xk,self.yk)def__truediv__(self,k):returnVector2D(self.x/k,self.y/k)def__abs__(self):returnmath.hypot(self.x,self.y)def__iter__(self):yieldself.x;yieldself.ydef__eq__(self,other):returnself.x==other.xandself.y==other.ydef__repr__(self):returnf'({self.x},{self.y})'测试v1=Vector2D(3,4)v2=Vector2D(1,2)print(v1+v2,abs(v1),v1*2)```28.(20分)算法与数据结构实现一个`MinStack`类,支持`push(x)`、`pop()`、`top()`、`getMin()`均为O(1)时间。要求用Python列表模拟栈,不借助外部库。参考实现:```pythonclassMinStack:def__init__(self):self.s=[]self.min_s=[]defpush(self,x):self.s.append(x)ifnotself.min_sorx<=self.min_s[-1]:self.min_s.append(x)defpop(self):ifself.s.pop()==self.min_s[-1]:self.min_s.pop()deftop(self):returnself.s[-1]defgetMin(self):returnself.min_s[-1]测试ms=MinStack()forvin[3,1,2,0]:ms.push(v)print(ms.getMin(),end='')#输出3110```29.(20分)综合实践:异步爬虫需求:获取/posts/1~10的标题,使用aiohttp并发请求,将标题写入post_titles.txt,每行一个标题,要求超时5秒,捕获网络异常并打印错误编号。参考实现:```pythonimportaiohttp,asyncio,sysURL='/posts/{}'asyncdeffetch(session,i):try:asyncwithsession.get(URL.format(i),timeout=5)asresp:ifresp.status!=200:raiseValueError(f'status{resp.status}')data=awaitresp.json()returndata['title']exceptExceptionase:print(f'post{i}error:{e}',file=sys.stderr)returnNoneasyncdefmain():asyncwithaiohttp.ClientSession()assession:tasks=[fetch(session,i)foriinrange(1,11)]titles=filter(None,awaitasyncio.gather(*tasks))withopen('post_titles.txt','w',encoding='utf-8')asf:f.write('\n'.join(titles))if__name__=='__main__':asyncio.run(main())```五、设计题(共50分)30.(50分)校园二手交易小程序后端背景:陕西国际商贸学院学生二手市场需开发简易RESTful后端,技术栈Python+Flask+SQLite,提供商品发布、搜索、下单、评价功能。要求:1.数据库模型:用户表(users)、商品表(items)、订单表(orders)、评价表(reviews),含外键约束。2.接口:POST/register注册POST/login登录返回JWTGET/items?q=关键字&page=页码分页搜索POST/items发布商品(需登录)POST/orders下单(库存减1)POST/reviews评价3.使用Flask-HTTPAuth验证,SQLAlchemyORM,Marshmallow序列化,分页搜索使用联合索引。4.提供单元测试覆盖主要逻辑,使用pytest与Flask测试客户端。5.代码需包含异常处理、事务、防SQL注入、防超卖。参考核心代码(节选,完整项目目录略):```pythonapp.pyfromflaskimportFlask,requestfromflask_sqlalchemyimportSQLAlchemyfromflask_marshmallowimportMarshmallowfromflask_httpauthimportHTTPTokenAuthfromwerkzeug.securityimportgenerate_password_hash,check_password_hashimportjwt,datetime,osapp=Flask(__name__)app.config['SQLALCHEMY_DATABASE_URI']='sqlite:///trade.db'app.config['SECRET_KEY']=os.urandom(24)db=SQLAlchemy(app)ma=Marshmallow(app)auth=HTTPTokenAuth(scheme='Bearer')classUser(db.Model):id=db.Column(db.Integer,primary_key=True)username=db.Column(db.String(80),unique=True,nullable=False)pw_hash=db.Column(db.String(128))items=db.relationship('Item',backref='seller')classItem(db.Model):id=db.Column(db.Integer,primary_key=True)title=db.Column(db.String(120),index=True)desc=db.Column(db.Text)stock=db.Column(db.Integer,default=1)seller_id=db.Column(db.Integer,db.ForeignKey('user.id'))classOrder(db.Model):id=db.Column(db.Integer,primary_key=True)buyer_id=db.Column(db.Integer,db.ForeignKey('user.id'))item_id=db.Column(db.Integer,db.ForeignKey('item.id'))status=db.Column(db.String(20),default='paid')classReview(db.Model):id=db.Column(db.Integer,primary_key=True)order_id=db.Column(db.Integer,db.ForeignKey('order.id'))score=db.Column(db.Integer)comment=db.Column(db.Text)classUserSchema(ma.SQLAlchemyAutoSchema):classMeta:model=Userexclude=('pw_hash',)user_schema=UserSchema()@auth.verify_tokendefverify(token):try:payload=jwt.decode(token,app.config['SECRET_KEY'],algorithms=['HS256'])returnUser.query.get(payload['uid'])except:returnNone@app.route('/register',methods=['POST'])defregister():data=request.jsonifUser.query.filter_by(username=data['username']).first():return{'msg':'userexists'},400u=User(username=data['username'],pw_hash=generate_password_hash(data['password']))db.session.add(u)mit()returnuser_schema.jsonify(u)@app.route('/login',methods=['POST'])deflogin():data=request.jsonu=User.query.filter_by(username=data['username']).first()ifuandcheck_password_hash(u.pw_hash,data['password']):token=jwt.encode({'uid':u.id,'exp':datetime.datetime.utcnow()+datetime.timedelta(hours=24)},app.config['SECRET_KEY'],algorithm='HS256')return{'token':token}return{'msg':'badcredential'},401@app.route('/items',methods=['GET'])defsearch_items():q=request.args.get('q','')page=int(request.args.get('page',1))pagination=Item.query.filter(Item.title.contains(q)).paginate(page=page,per_page=10,error_out=False)return{'items':[{'id':i.id,'title':i.title,'stock':i.stock}foriinpagination.items],'pages':pagination.pages}@app.route('/items',methods=['POST'])@auth.login_requireddefpost_item():data=request.jsonitem=Item(title=data['title'],desc=data.get('desc',''),stock=data['stock'],seller=auth.current_user())db.session.add(item)mit()return{'id':item.id},201@app.route('/orders',methods=['POST'])@auth.login_requireddefcreate_order():
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新学期幼儿教师培训课件
- 化学危化品培训课件
- 化学介绍课件
- 2026年危重患者转运安全流程与应急预案
- 2026年护理继续教育移动学习平台应用技巧
- 《GB 4706.96-2008家用和类似用途电器的安全 商业和工业用自动地板处理机的特殊要求》专题研究报告
- 2026年护理不良事件上报系统操作与改进
- 2025年信息化项目风险管理与控制
- 2026年餐饮店洗碗机维修协议
- 2026离婚协议书标准版模板
- 2026中国烟草总公司郑州烟草研究院高校毕业生招聘19人备考题库(河南)及1套完整答案详解
- 陶瓷工艺品彩绘师岗前工作标准化考核试卷含答案
- 居间合同2026年工作协议
- 医疗机构信息安全建设与风险评估方案
- 化工设备培训课件教学
- 供热运行与安全知识课件
- 2026年及未来5年市场数据中国3D打印材料行业发展前景预测及投资战略数据分析研究报告
- 2026年长沙卫生职业学院单招职业技能考试题库及答案详解1套
- 煤矿三违行为界定标准及处罚细则
- 服装厂安全生产责任制度制定
- 智研咨询发布:中国血友病药物行业市场现状及投资前景分析报告
评论
0/150
提交评论