2025年Python二级考试模拟试卷:项目实战专项训练_第1页
2025年Python二级考试模拟试卷:项目实战专项训练_第2页
2025年Python二级考试模拟试卷:项目实战专项训练_第3页
2025年Python二级考试模拟试卷:项目实战专项训练_第4页
2025年Python二级考试模拟试卷:项目实战专项训练_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

2025年Python二级考试模拟试卷:项目实战专项训练考试时间:______分钟总分:______分姓名:______一、项目背景与需求你正在参与开发一个简单的个人待办事项管理工具。该工具需要允许用户管理自己的任务列表,每个任务包含以下信息:任务ID(唯一数字标识)、任务描述(字符串)、任务状态("待办"、"进行中"、"已完成"三种状态之一)、创建日期(格式为YYYY-MM-DD)。工具需要支持以下核心功能:1.添加任务:用户可以输入任务描述,系统自动生成一个唯一的任务ID、设置初始状态为"待办"并记录当前日期,将任务信息保存到文件中。2.显示所有任务:列出文件中保存的所有任务信息。3.按状态显示任务:用户可以指定一个状态("待办"、"进行中"、"已完成"),列出所有状态匹配的任务。4.更新任务状态:用户可以通过输入任务ID,选择将任务状态更新为"待办"、"进行中"或"已完成"。5.删除任务:用户可以通过输入任务ID,删除指定的任务。6.退出程序:用户输入特定命令(如"exit")时,程序结束运行。任务数据需要持久化存储到名为`tasks.json`的JSON文件中。每次添加或删除任务后,程序应自动保存当前所有任务到该文件。每次读取任务时,应首先尝试读取该文件,如果文件不存在或内容格式错误,则初始化一个空任务列表。二、编码任务根据上述需求,请编写Python代码实现该个人待办事项管理工具。1.数据结构设计:定义一个字典来表示单个任务,包含`task_id`,`description`,`status`,`date_created`四个键。定义一个列表来存储所有任务。2.核心功能实现:*读取/保存任务数据:编写函数`load_tasks()`从`tasks.json`文件中读取任务数据,并返回任务列表。编写函数`save_tasks(task_list)`将任务列表保存到`tasks.json`文件中。*添加任务:编写函数`add_task(task_list,description)`,为新任务生成唯一ID(可以使用当前时间戳或递增的计数器,确保ID唯一),设置默认状态和创建日期,将新任务字典添加到任务列表中,并调用`save_tasks()`保存数据。*显示所有任务:编写函数`display_tasks(task_list)`,格式化打印任务列表中的所有任务信息。*按状态显示任务:编写函数`display_tasks_by_status(task_list,status)`,打印出状态匹配的所有任务。*更新任务状态:编写函数`update_task_status(task_list,task_id,new_status)`,根据任务ID找到对应任务,更新其状态为`new_status`,然后调用`save_tasks()`保存数据。*删除任务:编写函数`delete_task(task_list,task_id)`,根据任务ID找到并移除对应任务,然后调用`save_tasks()`保存数据。*主程序逻辑:编写主程序代码,提供一个简单的命令行循环界面。提示用户输入指令(如"add","list","listpending","update","delete","exit")。根据用户输入调用相应的功能函数。确保处理用户输入错误的情况(例如,输入不存在的命令,或输入格式不正确的任务ID)。3.代码实现:在下方空白处编写满足上述要求的Python代码。```python#请在下方编写代码```三、扩展思考(不计分,仅供参考)如果需要为这个待办事项工具添加“修改任务描述”的功能,你将如何设计代码?需要修改哪些现有的函数或添加哪些新的函数?请简要说明你的设计思路。试卷答案一、项目背景与需求(无答案,为题目背景)二、编码任务```pythonimportjsonimportosfromdatetimeimportdatetime#数据结构设计#任务字典模板(在函数内部定义即可)#save_tasks函数内部实现#display_tasks函数内部实现#读取/保存任务数据defload_tasks():try:ifos.path.exists('tasks.json'):withopen('tasks.json','r',encoding='utf-8')asf:task_list=json.load(f)#验证并转换日期格式fortaskintask_list:if'date_created'intaskandisinstance(task['date_created'],str):try:task['date_created']=datetime.strptime(task['date_created'],'%Y-%m-%d').date()exceptValueError:pass#如果日期格式不正确,保持原样或转换失败returntask_listelse:return[]except(json.JSONDecodeError,IOError):print("Errorloadingtasksdata.Startingwithanemptylist.")return[]defsave_tasks(task_list):try:withopen('tasks.json','w',encoding='utf-8')asf:#将日期对象转换回字符串格式进行存储fortaskintask_list:if'date_created'intaskandisinstance(task['date_created'],datetime):task['date_created']=task['date_created'].strftime('%Y-%m-%d')json.dump(task_list,f,ensure_ascii=False,indent=4)exceptIOError:print("Errorsavingtasksdata.")#核心功能实现defadd_task(task_list,description):ifnotdescription:print("Taskdescriptioncannotbeempty.")returnnew_task={'task_id':str(datetime.now().timestamp()),#使用时间戳作为唯一ID'description':description,'status':'待办','date_created':datetime.now().date()#记录创建日期}task_list.append(new_task)save_tasks(task_list)print(f"Taskadded:{new_task['task_id']}")defdisplay_tasks(task_list):ifnottask_list:print("Notasksfound.")returnprint("\nAllTasks:")fortaskintask_list:print(f"ID:{task['task_id']},Description:{task['description']},"f"Status:{task['status']},DateCreated:{task['date_created']}")defdisplay_tasks_by_status(task_list,status_filter):ifnottask_list:print("Notasksfound.")returnifstatus_filternotin["待办","进行中","已完成"]:print(f"Invalidstatusfilter:{status_filter}.Validoptionsare'待办','进行中','已完成'.")returnprint(f"\nTaskswithstatus'{status_filter}':")found=Falsefortaskintask_list:iftask['status']==status_filter:print(f"ID:{task['task_id']},Description:{task['description']},"f"Status:{task['status']},DateCreated:{task['date_created']}")found=Trueifnotfound:print(f"Notasksfoundwithstatus'{status_filter}'.")defupdate_task_status(task_list,task_id,new_status):iftask_idnotin[task['task_id']fortaskintask_list]:print(f"TaskID'{task_id}'notfound.")returnifnew_statusnotin["待办","进行中","已完成"]:print(f"Invalidnewstatus:{new_status}.Validoptionsare'待办','进行中','已完成'.")returnfortaskintask_list:iftask['task_id']==task_id:task['status']=new_statussave_tasks(task_list)print(f"Task'{task_id}'statusupdatedto'{new_status}'.")returndefdelete_task(task_list,task_id):initial_length=len(task_list)task_list=[taskfortaskintask_listiftask['task_id']!=task_id]iflen(task_list)==initial_length:print(f"TaskID'{task_id}'notfoundandwasnotdeleted.")else:save_tasks(task_list)print(f"Task'{task_id}'hasbeendeleted.")#主程序逻辑defmain():task_list=load_tasks()print("PersonalTodoListManager")print("Availablecommands:add,list,listpending,listinprogress,listcompleted,update,delete,exit")whileTrue:command=input("\nEntercommand:").strip().lower()ifcommand=='add':desc=input("Entertaskdescription:").strip()add_task(task_list,desc)elifcommand=='list':display_tasks(task_list)elifcommand=='listpending':display_tasks_by_status(task_list,'待办')elifcommand=='listinprogress':display_tasks_by_status(task_list,'进行中')elifcommand=='listcompleted':display_tasks_by_status(task_list,'已完成')elifcommand=='update':task_id=input("EntertaskIDtoupdate:").strip()ifnottask_id:print("TaskIDcannotbeempty.")continueprint("Enternewstatus(pending,inprogress,completed):")new_status=input().strip().lower()update_task_status(task_list,task_id,new_status)elifcommand=='delete':task_id=input("EntertaskIDtodelete:").strip()ifnottask_id:print("TaskIDcannotbeempty.")continue

温馨提示

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

评论

0/150

提交评论