Python新手求助:读取分数文件并统计最高分用户实现方案
解决用户分数累加与找最高分的问题
嘿,作为Python新手能完成文件读取和行分割这一步已经超棒了!接下来咱们用字典来搞定用户分数的去重累加,这是处理这类键值对应问题的绝佳工具,一步步来:
步骤1:用字典存储用户总分
首先创建一个空字典,用来记录每个用户的累计分数——字典的键是用户的完整姓名(名+姓),值是该用户的总分。然后遍历你已经生成的array列表,逐个提取姓名和分数并累加:
# 初始化空字典,用来存用户和对应的总分 score_dict = {} # 遍历分割后的每行数据 for item in array: # 提取完整姓名:把第3、4个元素(索引2和3)拼接起来 full_name = f"{item[2]} {item[3]}" # 提取分数:把最后一个元素转成整数(原始是字符串) current_score = int(item[-1]) # 分数累加逻辑:如果用户已在字典里就加当前分,否则初始化 if full_name in score_dict: score_dict[full_name] += current_score else: score_dict[full_name] = current_score
步骤2:找出总分最高的用户
有了累加后的字典,用max()函数就能快速锁定最高分对应的用户。我们通过key参数指定按分数值来比较:
# 从字典的键值对里找出分数最高的那一组 top_user, top_total_score = max(score_dict.items(), key=lambda x: x[1]) # 输出结果 print(f"总分最高的用户是:{top_user},累计分数:{top_total_score}")
完整整合代码
把你之前的文件读取逻辑和上面的代码整合起来,完整版本如下:
array = [] # 用with语句打开文件更安全,会自动帮你关闭文件 with open("你的作业分数文件.txt", "r", encoding="utf-8") as f: for line in f: # 先去掉行尾的换行符再分割,避免出现空元素 tempString = line.strip().split() array.append(tempString) # 分数累加逻辑 score_dict = {} for item in array: full_name = f"{item[2]} {item[3]}" current_score = int(item[-1]) if full_name in score_dict: score_dict[full_name] += current_score else: score_dict[full_name] = current_score # 找到并输出最高分用户 top_user, top_total_score = max(score_dict.items(), key=lambda x: x[1]) print(f"总分最高的用户:{top_user},总分:{top_total_score}")
小提示
- 如果遇到用户姓名包含中间名(比如三个单词),可以把姓名提取逻辑改成
" ".join(item[2:-1]),这样不管姓名有几个部分都能正确拼接 line.strip().split()比直接split()更稳妥,能避免行尾换行符带来的无效空元素
内容的提问来源于stack exchange,提问作者Christoffer Karlsson
相关产品推荐
相关产品推荐

