关于#python#的问题 按照成绩分组

我想编写一个python程序,但无从下手,我现在想给我们班的同学按照成绩分组,有四十八个人,每组四人,但是每组人的平均分必须要差不多,哪位知道的能帮忙一下,谢谢


stufen=[["apple",75],["李四",100],["张三",77],["mary",89],["jack",90],["马丽",89],["王强",75],["dog",16],["mark",14],["cindy",66],["bb",100],["rose",79]] #这是一个示例列表 当然也可以通过表格

img


成绩表.xlsx用来存放数据

帮你用Python写一个(已经很少问答了,如有帮助可以采纳上面这位大佬@以山河做礼。 ,我的其实也参考的他的一些部分):

import math

# 示例分数列表
stufen=[["apple",75],["李四",100],["张三",77],["mary",89],["jack",90],["马丽",89],["王强",75],["dog",16],["mark",14],["cindy",66],["bb",100],["rose",79]]

# 根据分数从高到低排序
stufen.sort(reverse=True, key=lambda s: s[1])

# 计算每组平均分
group_size = 4
group_count = math.ceil(len(stufen) / group_size)
target_avg_score = sum(score for _, score in stufen) / group_count

# 分组
groups = [[] for _ in range(group_count)]
for i, (name, score) in enumerate(stufen):
    group_index = i % group_count
    groups[group_index].append((name, score))

# 检查每组平均分是否在误差范围内
tolerance = 2 # 可调整的容忍误差
for group in groups:
    group_avg_score = sum(score for _, score in group) / len(group)
    if abs(group_avg_score - target_avg_score) > tolerance:
        print("无法分组:每组平均分差异太大!")
        break
else:
    # 分组成功,输出结果
    for i, group in enumerate(groups):
        print(f"第 {i+1} 组:")
        for name, score in group:
            print(f"  {name}{score}")