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

Python文件I/O代码问题:团队统计缺失及成员交换功能异常

解决团队分组统计与成员交换的Python代码重构

看起来你的代码目前只是在做简单的逐行打印,完全没对团队数据进行分组存储和统计,交换功能也只是读取输入没做实际的修改操作。我来帮你重构代码,实现你想要的分组统计和成员交换功能。

完整修复代码

def load_team_data(file_path):
    teams = {"Altos": {"members": [], "total_df": 0, "total_of": 0},
             "Webee": {"members": [], "total_df": 0, "total_of": 0}}
    with open(file_path, 'r') as fp_r:
        for line in fp_r:
            line = line.strip()
            if not line:
                continue
            name, df_str, of_str, team = line.split()
            df = int(df_str)
            of = int(of_str)
            # 添加成员到对应团队
            teams[team]["members"].append({"name": name, "df": df, "of": of})
            # 更新团队总DF和OF
            teams[team]["total_df"] += df
            teams[team]["total_of"] += of
    return teams

def display_team_stats(teams):
    print("\n=== Team Statistics ===")
    for team_name, data in teams.items():
        print(f"\n* {team_name} Team:")
        print(f"  Total DF: {data['total_df']}, Total OF: {data['total_of']}")
        print("  Members:")
        for member in data["members"]:
            print(f"    {member['name']}: DF = {member['df']}, OF = {member['of']}")

def swap_member_team(teams, member_name, new_team):
    # 先找到成员当前所在的团队
    current_team = None
    member_data = None
    for team_name, data in teams.items():
        for idx, member in enumerate(data["members"]):
            if member["name"] == member_name:
                current_team = team_name
                member_data = data["members"].pop(idx)
                # 从原团队减去成员的DF和OF
                teams[current_team]["total_df"] -= member_data["df"]
                teams[current_team]["total_of"] -= member_data["of"]
                break
        if current_team:
            break
    if not current_team:
        print(f"Error: Member {member_name} not found!")
        return False
    if new_team not in teams:
        print(f"Error: Team {new_team} does not exist!")
        return False
    # 添加到新团队
    teams[new_team]["members"].append(member_data)
    teams[new_team]["total_df"] += member_data["df"]
    teams[new_team]["total_of"] += member_data["of"]
    print(f"Successfully moved {member_name} from {current_team} to {new_team}!")
    return True

def save_team_data(file_path, teams):
    with open(file_path, 'w') as fp_w:
        for team_name, data in teams.items():
            for member in data["members"]:
                fp_w.write(f"{member['name']} {member['df']} {member['of']} {team_name}\n")

# 主程序
if __name__ == "__main__":
    team_file = "Team_Assignment.txt"
    # 加载数据
    teams = load_team_data(team_file)
    # 初始显示统计
    display_team_stats(teams)
    
    # 交换成员功能
    print("\n=== Member Swap Tool ===")
    print("Enter 'quit' to exit, or use format: [Member Name] [New Team] (e.g., Ba Altos)")
    while True:
        user_input = input("\nEnter swap command: ").strip()
        if user_input.lower() == 'quit':
            break
        if not user_input:
            print("Please enter a valid command!")
            continue
        parts = user_input.split()
        if len(parts) != 2:
            print("Invalid format! Use: [Member Name] [New Team]")
            continue
        member_name, new_team = parts[0], parts[1]
        swap_member_team(teams, member_name, new_team)
        # 交换后重新显示统计
        display_team_stats(teams)
    
    # 询问是否保存修改
    save_choice = input("\nDo you want to save the changes to the file? (y/n): ").strip().lower()
    if save_choice == 'y':
        save_team_data(team_file, teams)
        print("Changes saved successfully!")
    else:
        print("Changes not saved.")

原代码的核心问题分析

  • 无结构化数据存储:只是逐行打印,没有将团队和成员数据分组保存,无法计算总DF/OF
  • 交换功能缺失逻辑:仅读取输入字符串,没有修改数据、更新团队关联的实际操作
  • 冗余代码:if "Altos" in s判断完全多余,两个分支执行完全相同的打印代码
  • 文件操作不够安全:虽然最后调用了close(),但使用with语句能自动处理文件关闭,避免意外报错

修复后代码的关键功能说明

  1. 数据结构化加载

    • 用字典存储两个团队的成员列表、总DF和总OF,方便后续统计和修改
    • 自动将DF/OF转换为整数,支持数值计算
  2. 清晰的统计展示

    • 按团队分组输出,先显示团队总统计,再列出所有成员的详细信息,格式清晰易读
  3. 完整的成员交换逻辑

    • 自动查找成员当前所在团队,移除并更新原团队统计
    • 验证目标团队是否存在,添加成员后更新新团队统计
    • 包含错误提示,比如成员不存在或团队名称错误
  4. 数据持久化支持

    • 可以将修改后的团队数据写回原文件,确保交换操作的结果被保存
  5. 友好的用户交互

    • 明确的命令提示,支持quit退出
    • 输入格式验证,避免无效操作
    • 每次交换后自动刷新显示最新统计

内容的提问来源于stack exchange,提问作者Pia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 22:32:50