我想编写一个python程序,但无从下手,我现在想给我们班的同学按照成绩分组,有四十八个人,每组四人,但是每组人的平均分必须要差不多,哪位知道的能帮忙一下,谢谢
stufen=[["apple",75],["李四",100],["张三",77],["mary",89],["jack",90],["马丽",89],["王强",75],["dog",16],["mark",14],["cindy",66],["bb",100],["rose",79]] #这是一个示例列表 当然也可以通过表格
帮你用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}")