如何利用enumerate生成的序号实现Python任务的选择与修改?
解决方案
核心要解决两个问题:让view_mine能关联任务编号与原文件中的任务,修改后将更新内容写回文件。以下是完整实现:
1. 重构view_mine函数
修改函数使其既能打印带编号的用户任务,又能返回所有任务列表、当前用户的任务(含原文件行索引),方便后续定位修改:
def view_mine(user_name): all_tasks = [] user_tasks = [] # 读取所有任务并保存,同时筛选当前用户的任务 with open("tasks.txt", "r") as file: for idx, line in enumerate(file): task_data = line.strip().split(", ") all_tasks.append(task_data) if task_data[0] == user_name: user_tasks.append((idx, task_data)) # 打印用户任务列表 if not user_tasks: print("你没有任何任务") return all_tasks, [] print("\n你的任务列表:") for i, (_, task) in enumerate(user_tasks, 1): print(f"\n{i}. 负责人:\t{task[0]}\n任务标题:\t{task[1]}\n任务描述:\t{task[2]}\n创建日期:\t{task[3]}\n截止日期:\t{task[4]}\n是否完成:\t{task[5]}") return all_tasks, user_tasks
2. 实现任务选择与修改逻辑
替换你原来的修改代码,用以下逻辑完成编号关联、修改、文件写入:
# 主循环示例(假设user_name已定义) while True: all_tasks, user_tasks = view_mine(user_name) if not user_tasks: input("\n按回车键返回主菜单...") break print("\n") task_selection = input("选择要修改的任务编号(输入-1返回主菜单):") # 输入合法性校验 try: task_selection = int(task_selection) except ValueError: print("请输入有效的数字!") continue if task_selection == -1: break if task_selection < 1 or task_selection > len(user_tasks): print("无效的任务编号!") continue # 获取选中任务的原文件索引和数据 original_idx, selected_task = user_tasks[task_selection - 1] # 处理修改操作 task_modification = input("\n请选择操作:\n1-编辑任务\n2-标记为完成\n输入选择:") if task_modification == "1": edit_choice = input("\n请选择编辑项:\n1-修改负责人\n2-修改截止日期\n输入选择:") if edit_choice == "1": new_user = input("输入新负责人用户名:").strip() selected_task[0] = new_user print("负责人已修改!") elif edit_choice == "2": new_due_date = input("输入新截止日期:").strip() selected_task[4] = new_due_date print("截止日期已修改!") else: print("无效选择!") continue elif task_modification == "2": if selected_task[5] == "No": selected_task[5] = "Yes" print("任务已标记为完成!") else: print("该任务已完成!") else: print("无效选择!") continue # 将修改后的任务更新到总列表,再写回文件 all_tasks[original_idx] = selected_task with open("tasks.txt", "w") as file: for task in all_tasks: file.write(", ".join(task) + "\n") input("\n修改已保存,按回车键继续...")
关键说明
- 任务索引关联:通过
user_tasks保存用户任务在总列表中的位置,确保修改的是原文件中对应的任务行。 - 输入校验:增加非数字、无效编号的判断,避免程序崩溃。
- 文件写入:每次修改后重新写入所有任务,保证文件内容与内存数据一致。
- 无全局变量依赖:将
user_name作为参数传入函数,代码更健壮。
内容的提问来源于stack exchange,提问作者vasi
相关产品推荐
相关产品推荐

