You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 07:07:04