程序试题及答案_第1页
程序试题及答案_第2页
程序试题及答案_第3页
程序试题及答案_第4页
程序试题及答案_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

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

文档简介

程序试题及答案一、选择题(每题2分,共40分)1.下列哪个是Python的正确变量名?A.2variableB.variable-nameC.variable_nameD.class2.在Python中,下列哪个数据类型是不可变的?A.列表B.字典C.元组D.集合3.以下哪个循环会执行无限次?A.foriinrange(0):B.whileFalse:C.foriin[]:D.whileTrue:4.在Python中,下列哪个方法用于向列表末尾添加元素?A.append()B.add()C.insert()D.extend()5.下列哪个不是Python的关键字?A.NoneB.assertC.mainD.lambda6.在面向对象编程中,下列哪个概念描述了创建新类的过程?A.继承B.封装C.多态D.实例化7.在Python中,下列哪个函数用于获取列表的长度?A.size()B.length()C.len()D.count()8.下列哪个运算符用于计算两个集合的交集?A.+B.-C.&D.9.在Python中,下列哪个模块用于生成随机数?A.mathB.randomC.statisticsD.numpy10.下列哪个Python特性允许函数返回多个值?A.元组解包B.列表推导C.生成器D.装饰器11.在Python中,下列哪个方法用于从字典中删除键值对?A.remove()B.delete()C.pop()D.discard()12.下列哪个是Python的文件打开模式,表示以只读方式打开文件?A.'r'B.'w'C.'a'D.'x'13.在Python中,下列哪个函数用于捕获异常?A.try()B.catch()C.except()D.raise()14.下列哪个数据结构最适合实现队列?A.列表B.字典C.集合D.双端队列(deque)15.在Python中,下列哪个运算符用于计算整除?A./B.//C.%D.16.下列哪个Python函数用于创建虚拟环境?A.venv()B.create_env()C.virtualenv()D.pipenv()17.在Python中,下列哪个装饰器用于将函数标记为类方法?A.@staticmethodB.@classmethodC.@propertyD.@abstractmethod18.下列哪个是Python的内置函数,用于返回对象的类型?A.type()B.isinstance()C.hasattr()D.callable()19.在Python中,下列哪个模块用于处理日期和时间?A.datetimeB.timeC.calendarD.date20.下列哪个不是Python的内置数据类型?A.intB.strC.arrayD.float二、填空题(每空2分,共30分)1.在Python中,使用____关键字可以定义函数。2.Python中的____运算符用于计算两个数的余数。3.列表推导式[xforxinrange(10)ifx%2==0]会生成一个包含____的列表。4.在Python中,使用____函数可以将字符串转换为浮点数。5.类的____方法是一种特殊方法,用于创建类的实例。6.在Python中,____模块提供了对正则表达式的支持。7.Python中的____语句用于有条件地执行代码块。8.在Python中,使用____函数可以获取当前系统时间。9.列表的____方法用于在指定位置插入元素。10.在Python中,____运算符用于检查一个对象是否属于某个类型。11.函数参数前加上____表示这是一个关键字参数。12.在Python中,____关键字用于导入模块。13.列表的____方法用于反转列表中的元素顺序。14.在Python中,____语句用于跳出当前循环。15.在Python中,____函数用于将对象转换为字符串表示形式。三、判断题(每题2分,共20分)1.Python是强类型语言。2.在Python中,列表和元组的主要区别是列表是不可变的,而元组是可变的。3.在Python中,缩进是用来表示代码块的,而不是使用大括号。4.在Python中,函数可以有多个返回值。5.在Python中,字典的键必须是不可变类型。6.在Python中,pass语句是一个空操作,不做任何事情,但保持代码的完整性。7.在Python中,全局变量可以在任何地方直接修改,不需要使用global关键字。8.在Python中,lambda表达式只能包含单个表达式。9.在Python中,文件操作完成后必须关闭文件,否则可能导致资源泄漏。10.在Python中,递归函数总是比迭代实现更高效。四、简答题(每题10分,共30分)1.解释Python中的GIL(全局解释器锁)是什么,它如何影响多线程编程?2.描述Python中的装饰器(Decorator)是什么,以及它的主要用途。3.解释Python中的生成器(Generator)和迭代器(Iterator)的区别与联系。4.描述Python中的深拷贝(deepcopy)和浅拷贝(shallowcopy)的区别,并举例说明。5.解释Python中的垃圾回收机制是如何工作的。五、程序阅读题(每题15分,共30分)1.阅读以下Python代码,分析其功能并输出结果:```pythondeffunc(lst):iflen(lst)<=1:returnlstpivot=lst[len(lst)//2]left=[xforxinlstifx<pivot]middle=[xforxinlstifx==pivot]right=[xforxinlstifx>pivot]returnfunc(left)+middle+func(right)numbers=[3,6,8,10,1,2,1]result=func(numbers)print(result)```2.阅读以下Python代码,分析其功能并输出结果:```pythonclassMyClass:def__init__(self,value):self.value=valuedef__str__(self):returnf"MyClass({self.value})"def__add__(self,other):ifisinstance(other,MyClass):returnMyClass(self.value+other.value)returnNotImplementedobj1=MyClass(5)obj2=MyClass(10)result=obj1+obj2print(result)print(type(result))```六、程序填空题(每空2分,共20分)1.以下是一个实现二分查找的函数,请填空完成代码:```pythondefbinary_search(arr,target):low=0high=len(arr)-1while____:mid=(low+high)//2ifarr[mid]==target:returnmidelifarr[mid]<target:low=____else:high=____return____```2.以下是一个使用装饰器实现函数执行时间统计的代码,请填空完成:```pythonimporttimedeftime_decorator(func):defwrapper(args,kwargs):start_time=____result=func(args,kwargs)end_time=____print(f"函数{func.__name__}执行时间:{end_time-start_time}秒")return____return____@time_decoratordefcalculate_factorial(n):ifn==0:return1else:returnncalculate_factorial(n-1)result=calculate_factorial(5)print(f"5的阶乘是:{result}")```七、程序设计题(共30分)1.设计一个学生成绩管理系统,要求实现以下功能:-添加学生信息(包括学号、姓名、各科成绩)-删除学生信息-修改学生成绩-查询学生信息-计算学生平均成绩-按照平均成绩排序学生-将学生信息保存到文件-从文件加载学生信息请实现上述功能,并编写一个简单的命令行界面来测试这些功能。2.实现一个简单的文本编辑器,支持以下功能:-打开文本文件-编辑文本内容-保存文本文件-查找文本-替换文本-撤销操作-重做操作请使用面向对象的思想设计并实现这个文本编辑器。答案:一、选择题1.答案:C解释:在Python中,变量名必须以字母或下划线开头,后面可以跟字母、数字或下划线。选项A以数字开头,选项B包含连字符,选项D是Python关键字,都不符合变量名规则。选项C符合变量名规则。2.答案:C解释:在Python中,元组是不可变数据类型,而列表、字典和集合是可变的。一旦创建,元组的内容就不能被修改。3.答案:D解释:选项A和C中的循环不会执行,因为range(0)和空列表都是空的。选项B中的循环条件为False,所以不会执行。选项D中的循环条件为True,因此会无限执行。4.答案:A解释:在Python中,append()方法用于向列表末尾添加元素。add()是集合的方法,insert()用于在指定位置插入元素,extend()用于将另一个列表的所有元素添加到当前列表的末尾。5.答案:C解释:在Python中,main不是关键字,而是Python程序的常见入口点名称。None、assert和lambda都是Python的关键字。6.答案:A解释:继承是创建新类的过程,新类(子类)继承现有类(父类)的属性和方法。封装是隐藏内部实现细节,多态是允许不同类型的对象对同一消息做出响应,实例化是创建类的具体对象。7.答案:C解释:在Python中,len()函数用于获取列表的长度。size()和length()不是Python列表的方法,count()用于统计元素出现的次数。8.答案:C解释:在Python中,&运算符用于计算两个集合的交集。+运算符用于连接集合,-运算符用于计算差集,运算符在集合上没有定义。9.答案:B解释:在Python中,random模块用于生成随机数。math模块提供数学函数,statistics模块提供统计函数,numpy是第三方库,主要用于科学计算。10.答案:A解释:Python允许函数返回多个值,实际上是返回一个元组,然后可以通过元组解包将多个值赋给多个变量。列表推导是创建列表的简洁方式,生成器用于创建迭代器,装饰器用于修改函数行为。11.答案:C解释:在Python中,pop()方法用于从字典中删除键值对并返回其值。remove()和delete()不是字典的方法,discard()是集合的方法。12.答案:A解释:在Python中,'r'模式表示以只读方式打开文件。'w'模式表示写入文件(会覆盖原有内容),'a'模式表示追加内容,'x'模式表示排他性创建(如果文件已存在则失败)。13.答案:C解释:在Python中,except关键字用于捕获异常。try用于尝试执行可能引发异常的代码,catch不是Python的关键字,raise用于手动引发异常。14.答案:D解释:双端队列(deque)最适合实现队列,因为它可以在两端高效地添加和删除元素。虽然列表也可以实现队列,但在两端操作的时间复杂度为O(n),而deque为O(1)。字典和集合不适用于实现队列。15.答案:B解释:在Python中,//运算符用于计算整除。/运算符用于浮点除法,%运算符用于计算余数,运算符用于幂运算。16.答案:A解释:在Python中,venv模块用于创建虚拟环境。virtualenv和pipenv是第三方工具,create_env不是Python内置函数。17.答案:B解释:@classmethod装饰器用于将函数标记为类方法,它接收类作为第一个参数。@staticmethod用于标记静态方法,@property用于将方法转换为属性,@abstractmethod用于标记抽象方法。18.答案:A解释:在Python中,type()函数返回对象的类型。isinstance()用于检查对象是否属于某个类型,hasattr()用于检查对象是否有某个属性,callable()用于检查对象是否可调用。19.答案:A解释:在Python中,datetime模块用于处理日期和时间。time模块用于处理时间,calendar模块用于处理日历,date是datetime模块中的一个类。20.答案:C解释:在Python中,array不是内置数据类型,它是array模块中的类型。int、str和float都是Python的内置数据类型。二、填空题1.答案:def解释:在Python中,使用def关键字定义函数。2.答案:%解释:在Python中,%运算符用于计算两个数的余数。3.答案:0到9之间的偶数解释:列表推导式[xforxinrange(10)ifx%2==0]会生成一个包含0到9之间的偶数的列表,即[0,2,4,6,8]。4.答案:float()解释:在Python中,float()函数用于将字符串转换为浮点数。5.答案:__init__解释:在Python中,__init__是一种特殊方法(构造方法),用于创建类的实例。6.答案:re解释:在Python中,re模块提供了对正则表达式的支持。7.答案:if解释:在Python中,if语句用于有条件地执行代码块。8.答案:time()解释:在Python中,time()函数(来自time模块)用于获取当前系统时间。9.答案:insert解释:在Python中,列表的insert方法用于在指定位置插入元素。10.答案:isinstance解释:在Python中,isinstance运算符用于检查一个对象是否属于某个类型。11.答案:解释:在Python中,函数参数前加上表示这是一个关键字参数,可以接受任意数量的关键字参数。12.答案:import解释:在Python中,import关键字用于导入模块。13.答案:reverse解释:在Python中,列表的reverse方法用于反转列表中的元素顺序。14.答案:break解释:在Python中,break语句用于跳出当前循环。15.答案:str()解释:在Python中,str()函数用于将对象转换为字符串表示形式。三、判断题1.答案:正确解释:Python是强类型语言,这意味着变量有明确的类型,并且类型转换需要显式进行。2.答案:错误解释:在Python中,列表是可变的,而元组是不可变的。题目中的描述正好相反。3.答案:正确解释:在Python中,缩进是用来表示代码块的,而不是使用大括号或其他符号。这是Python的一个显著特点。4.答案:正确解释:在Python中,函数可以有多个返回值,实际上是返回一个元组,然后可以通过元组解包将多个值赋给多个变量。5.答案:正确解释:在Python中,字典的键必须是不可变类型,如数字、字符串、元组等,因为不可变对象可以作为字典的键。6.答案:正确解释:在Python中,pass语句是一个空操作,不做任何事情,但保持代码的完整性,通常用作占位符。7.答案:错误解释:在Python中,如果在函数内部修改全局变量,需要使用global关键字声明,否则Python会创建一个新的局部变量。8.答案:正确解释:在Python中,lambda表达式只能包含单个表达式,不能包含语句或多行代码。9.答案:正确解释:在Python中,文件操作完成后必须关闭文件,否则可能导致资源泄漏。可以使用with语句来自动管理文件资源。10.答案:错误解释:在Python中,递归函数并不总是比迭代实现更高效。递归函数通常有更多的函数调用开销,并且可能导致栈溢出,而迭代实现通常更高效。四、简答题1.答案:GIL(全局解释器锁)是Python解释器的一种机制,它确保在任何时刻只有一个线程执行Python字节码。这意味着即使在多核处理器上,Python的多线程程序也无法实现真正的并行执行,而是通过并发(concurrency)来提高性能。GIL的主要影响包括:-限制了多线程程序的并行性,因为同一时间只有一个线程可以执行Python字节码-对于CPU密集型任务,多线程并不能带来性能提升-对于I/O密集型任务,多线程仍然有用,因为当一个线程等待I/O时,其他线程可以继续执行为了绕过GIL的限制,可以使用多进程(multiprocessing)模块,或者使用其他没有GIL的解释器(如Jython或IronPython)。此外,对于CPU密集型任务,可以使用C扩展或Cython来绕过GIL。2.答案:装饰器(Decorator)是Python中一种高级特性,它允许在不修改函数或类代码的情况下,动态地为其添加功能。装饰器本质上是一个函数,它接受一个函数作为参数,并返回一个新的函数。装饰器的主要用途包括:-添加日志记录功能-计时函数执行时间-检查函数参数-缓存函数结果-实现权限控制-修改或扩展函数行为例如,可以使用装饰器来记录函数的调用情况:```pythondeflogger(func):defwrapper(args,kwargs):print(f"调用函数:{func.__name__}")result=func(args,kwargs)print(f"函数{func.__name__}返回:{result}")returnresultreturnwrapper@loggerdefadd(x,y):returnx+yadd(3,5)```在这个例子中,logger是一个装饰器,它包装了add函数,添加了日志记录功能,而不需要修改add函数本身。3.答案:生成器(Generator)和迭代器(Iterator)都是Python中用于遍历数据序列的机制,但它们有一些区别和联系:迭代器是一个实现了迭代器协议的对象,它必须实现__iter__()和__next__()方法。迭代器可以逐个返回数据序列中的元素,直到没有更多元素时引发StopIteration异常。生成器是一种特殊的迭代器,它使用yield关键字而不是return来返回值。生成器函数在执行时暂停,保留状态,并在下次调用时从暂停的地方继续执行。区别:-所有生成器都是迭代器,但不是所有迭代器都是生成器-生成器使用yield关键字,而普通迭代器需要手动实现__iter__()和__next__()方法-生成器更节省内存,因为它一次只生成一个元素,而不是一次性生成所有元素-生成器可以无限生成值,而普通迭代器通常是有限的联系:-两者都实现了迭代器协议-两者都可以用于for循环-两者都可以使用next()函数获取下一个元素例如,以下是一个生成器函数:```pythondefcountdown(n):whilen>0:yieldnn-=1foriincountdown(5):print(i)```这个生成器函数可以生成从n到1的倒序数字序列。4.答案:深拷贝(deepcopy)和浅拷贝(shallowcopy)是Python中两种不同的对象复制方式:浅拷贝创建一个新对象,但新对象的元素是原对象元素的引用。这意味着如果元素是可变的,修改它们会影响原对象。浅拷贝可以使用copy模块的copy()函数或切片[:]操作符创建。深拷贝创建一个新对象,并递归地复制所有可变对象,使得新对象与原对象完全独立。修改深拷贝中的任何元素都不会影响原对象。深拷贝可以使用copy模块的deepcopy()函数创建。例如:```pythonimportcopyoriginal=[1,[2,3],4]浅拷贝shallow_copy=copy.copy(original)shallow_copy[1].append(5)print(original)输出:[1,[2,3,5],4]深拷贝deep_copy=copy.deepcopy(original)deep_copy[1].append(5)print(original)输出:[1,[2,3],4]```在这个例子中,浅拷贝修改了嵌套列表,影响了原对象,而深拷贝修改了嵌套列表,但没有影响原对象。5.答案:Python的垃圾回收机制主要通过引用计数和循环垃圾回收器(garbagecollector)来实现:1.引用计数:-每个对象都有一个引用计数器,记录有多少个引用指向该对象-当引用计数器降为0时,对象会被垃圾回收-优点:简单高效,可以立即回收无用的对象-缺点:无法处理循环引用(两个或多个对象互相引用,导致它们的引用计数永远不会降为0)2.循环垃圾回收器:-解决引用计数无法处理循环引用的问题-定期检测对象之间的引用关系,找出循环引用的组-如果一个循环引用中的所有对象都没有外部引用,则回收这些对象此外,Python还使用分代垃圾回收(generationalgarbagecollection)来优化性能:-将对象分为三代(0代、1代、2代)-新创建的对象属于0代-每一代对象被回收的频率不同,0代最频繁,2代最不频繁-当一代对象被回收时,如果发现该代中的对象引用了其他代的对象,则被引用的对象会被"提升"到更高的代这种分代策略基于"弱代假说"(weakgenerationalhypothesis),即大多数对象存活时间很短,而存活时间长的对象很少被引用。总的来说,Python的垃圾回收机制结合了引用计数和循环垃圾回收,通过分代策略优化性能,确保无用的对象被及时回收,同时处理循环引用等特殊情况。五、程序阅读题1.答案:这段代码实现了快速排序(QuickSort)算法。它通过选择一个基准值(pivot),将列表分为小于、等于和大于基准值的三部分,然后递归地对小于和大于基准值的部分进行排序,最后将三部分合并起来。对于输入列表[3,6,8,10,1,2,1],排序过程如下:-第一次递归:基准值为10(列表中间的元素)-小于10的部分:[3,6,8,1,2,1]-等于10的部分:[10]-大于10的部分:[]-对小于10的部分递归:基准值为8-小于8的部分:[3,6,1,2,1]-等于8的部分:[8]-大于8的部分:[]-对小于8的部分递归:基准值为6-小于6的部分:[3,1,2,1]-等于6的部分:[6]-大于6的部分:[]-对小于6的部分递归:基准值为1(列表中间的元素)-小于1的部分:[]-等于1的部分:[1,1]-大于1的部分:[3,2]-对大于1的部分递归:基准值为2-小于2的部分:[]-等于2的部分:[2]-大于2的部分:[3]-对大于2的部分递归:基准值为3-小于3的部分:[]-等于3的部分:[3]-大于3的部分:[]将所有部分合并起来,得到最终排序结果:[1,1,2,3,6,8,10]因此,程序输出的结果是:```[1,1,2,3,6,8,10]```2.答案:这段代码定义了一个MyClass类,并实现了__add__特殊方法,使得两个MyClass对象可以使用+运算符进行加法运算。在代码中:-定义了一个MyClass类,它有一个value属性-实现了__str__方法,使得打印对象时显示"MyClass(value)"的格式-实现了__add__方法,使得两个MyClass对象相加时,返回一个新的MyClass对象,其value为两个对象value的和当执行以下代码时:```pythonobj1=MyClass(5)obj2=MyClass(10)result=obj1+obj2print(result)print(type(result))```首先创建了两个MyClass对象,obj1和obj2,分别初始化为5和10。然后执行obj1+obj2,这会调用obj1的__add__方法,传入obj2作为参数。由于obj2是MyClass实例,所以__add__方法返回一个新的MyClass对象,其value为5+10=15。打印result时,会调用__str__方法,显示"MyClass(15)"。最后打印result的类型,显示<class'__main__.MyClass'>。因此,程序输出的结果是:```MyClass(15)<class'__main__.MyClass'>```六、程序填空题1.答案:```pythondefbinary_search(arr,target):low=0high=len(arr)-1whilelow<=high:填空1:循环条件是low<=highmid=(low+high)//2ifarr[mid]==target:returnmidelifarr[mid]<target:low=mid+1填空2:如果中间元素小于目标,则搜索右半部分else:high=mid-1填空3:如果中间元素大于目标,则搜索左半部分return-1填空4:如果未找到目标,返回-1```2.答案:```pythonimporttimedeftime_decorator(func):defwrapper(args,kwargs):start_time=time.time()填空1:记录开始时间result=func(args,kwargs)end_time=time.time()填空2:记录结束时间print(f"函数{func.__name__}执行时间:{end_time-start_time}秒")returnresult填空3:返回函数结果returnwrapper填空4:返回包装后的函数@time_decoratordefcalculate_factorial(n):ifn==0:return1else:returnncalculate_factorial(n-1)result=calculate_factorial(5)print(f"5的阶乘是:{result}")```七、程序设计题1.答案:```pythonimportjsonimportosclassStudent:def__init__(self,student_id,name,scores):self.student_id=student_id=nameself.scores=scores字典,科目名为键,分数为值defget_average(self):ifnotself.scores:return0returnsum(self.scores.values())/len(self.scores)defto_dict(self):return{'student_id':self.student_id,'name':,'scores':self.scores}@classmethoddeffrom_dict(cls,data):returncls(data['student_id'],data['name'],data['scores'])classStudentManagementSystem:def__init__(self):self.students=[]self.filename='students.json'defadd_student(self,student_id,name,scores):检查学号是否已存在forstudentinself.students:ifstudent.student_id==student_id:print(f"学号{student_id}已存在,添加失败")returnFalsenew_student=Student(student_id,name,scores)self.students.append(new_student)print(f"学生{name}添加成功")returnTruedefdelete_student(self,student_id):fori,studentinenumerate(self.students):ifstudent.student_id==student_id:delself.students[i]print(f"学号{student_id}的学生信息已删除")returnTrueprint(f"未找到学号{student_id}的学生")returnFalsedefmodify_student(self,student_id,name=None,scores=None):forstudentinself.students:ifstudent.student_id==student_id:ifnameisnotNone:=nameifscoresisnotNone:student.scores=scoresprint(f"学号{student_id}的学生信息已更新")returnTrueprint(f"未找到学号{student_id}的学生")returnFalsedefquery_student(self,student_id):forstudentinself.students:ifstudent.student_id==student_id:returnstudentreturnNonedefcalculate_average(self,student_id):student=self.query_student(student_id)ifstudent:returnstudent.get_average()returnNonedefsort_students(self):self.students.sort(key=lambdax:x.get_average(),reverse=True)defsave_to_file(self):data=[student.to_dict()forstudentinself.students]withopen(self.filename,'w',encoding='utf-8')asf:json.dump(data,f,ensure_ascii=False,indent=4)print(f"学生信息已保存到{self.filename}")defload_from_file(self):ifnotos.path.exists(self.filename):print(f"文件{self.filename}不存在")returnFalsewithopen(self.filename,'r',encoding='utf-8')asf:data=json.load(f)self.students=[Student.from_dict(item)foritemindata]print(f"已从{self.filename}加载学生信息")returnTruedefdisplay_menu(self):print("\n学生成绩管理系统")print("1.添加学生信息")print("2.删除学生信息")print("3.修改学生成绩")print("4.查询学生信息")print("5.计算学生平均成绩")print("6.按照平均成绩排序学生")print("7.保存学生信息到文件")print("8.从文件加载学生信息")print("0.退出系统")defrun(self):whileTrue:self.display_menu()choice=input("请选择操作:")ifchoice=='1':student_id=input("请输入学号:")name=input("请输入姓名:")scores={}whileTrue:subject=input("请输入科目名称(直接回车结束):")ifnotsubject:breakscore=float(input(f"请输入{subject}成绩:"))scores[subject]=scoreself.add_student(student_id,name,scores)elifchoice=='2':student_id=input("请输入要删除的学生学号:")self.delete_student(student_id)elifchoice=='3':student_id=input("请输入要修改的学生学号:")student=self.query_student(student_id)ifstudent:name=input(f"请输入新姓名(当前:{},直接回车不修改):")ifname:=namescores={}forsubjectinstudent.scores:new_score=input(f"请输入{subject}新成绩(当前:{student.scores[subject]},直接回车不修改):")ifnew_score:scores[subject]=float(new_score)ifscores:student.scores.update(scores)print(f"学号{student_id}的学生信息已更新")else:print(f"未找到学号{student_id}的学生")elifchoice=='4':student_id=input("请输入要查询的学生学号:")student=self.query_student(student_id)ifstudent:print(f"学号:{student.student_id}")print(f"姓名:{}")print("成绩:")forsubject,scoreinstudent.scores.items():print(f"{subject}:{score}")print(f"平均成绩:{student.get_average():.2f}")else:print(f"未找到学号{student_id}的学生")elifchoice=='5':student_id=input("请输入要计算平均成绩的学生学号:")average=self.calculate_average(student_id)ifaverageisnotNone:print(f"学号{student_id}的平均成绩:{average:.2f}")else:print(f"未找到学号{student_id}的学生")elifchoice=='6':self.sort_students()print("学生按平均成绩排序结果:")fori,studentinenumerate(self.students,1):print(f"{i}.学号:{student.student_id},姓名:{},平均成绩:{student.get_average():.2f}")elifchoice=='7':self.save_to_file()elifchoice=='8':self.load_from_file()elifchoice=='0':print("感谢使用学生成绩管理系统,再见!")breakelse:print("无效的选择,请重新输入")if__name__=="__main__":system=StudentManagementSystem()system.run()```2.答案:```pythonimportosclassTextEditor:def__init__(self):self.content=[]存储文本内容,每行一个字符串self.history=[]存储历史记录,用于撤销self.redo_stack=[]存储重做记录defopen_file(self,filename):ifnotos.path.exists(filename):print(f"文件{filename}不存在")returnFalseself.save_state()保存当前状态到历史记录withopen(filename,'r',encoding='utf-8')asf:self.content=f.readlines()移除每行末尾的换行符,以便统一处理self.content=[line.rstrip('\n')forlineinself.content]self.redo_stack=[]打开新文件后清空重做栈print(f"已打开文件{filename}")returnTruedefsave_file(self,filename=None):iffilenameisNone:filename=input("请输入要保存的文件名:")withopen(filename,'w',encoding='utf-8')asf:forlineinself.content:f.write(line+'\n')print(f"已保存到文件{filename}")returnTruedefedit_text(self):print("\n当前文本内容:")fori,lineinenumerate(self.content,1):print(f"{i}:{line}")whileTrue:print("\n编辑选项:")print("1.插入行")print("2.修改行")print("3.删除行")print("4.返回")choice=input("请选择操作:")ifchoice=='1':line_num=int(input("请输入要插入的位置(从1开始):"))ifline_num<1orline_num>len(self.content)+1:print("无效的位置")continuetext=input("请输入要插入的文本:")self.save_state()保存当前状态到历史记录self.content.insert(line_num-1,text)print("文本已插入")elifchoice=='2':line_num=int(input("请输入要修改的行号(从1开始):"))ifline_num<1orline_num>len(self.content):print("无效的行号")continuetext=input("请输入新的文本:")self.save_state()保存当前状态到历史记录self.content[line_num-1]=textprint("文本已修改")elifchoice=='3':line_num=int(input("请输入要删除的行号(从1开始):"))ifline_num<1orline_num>len(self.content):print("无效的行号")continueself.save_state()保存当前状态到历史记录delself.content[line_num-1]print("行已删除")elifchoice=='4':breakelse:print("无效的选择")显示更新后的文本内容print("\n当前文本内容:")fori,lineinenumerate(self.content,1):print(f"{i}:{line}")deffind_text(self):search_text=input("请输入要查找的文本:")found_lines=[]fori,lineinenumerate(self.content,1):ifsearch_textinline:found_lines.append((i,line))iffound_lines:print(f"找到{len(found_lines)}处匹配:")forline_num,lineinfound_lines:print(f"行{line_num}:{line}")else:print("未找到匹配的文本")defreplace_text(self):old

温馨提示

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

最新文档

评论

0/150

提交评论