Eric1949901 2023-01-17 18:00 采纳率: 50%
浏览 131
已结题

python学生分组问题

学生被分成 4 个小组。每个组都分配了一种颜色。每年,当新生在入校时,他们会被平分到这 4 个有颜色的组别中。所有兄弟姐妹,无论年龄大小,都被分配到相同颜色的组。 (你可以假设所有兄弟姐妹都有相同的姓氏。)
编写一个函数divide_students(existing_students, new_students),它接收现有学生的列表(所有当前就读学校的学生),包括他们的名字,姓氏group,以及新生列表,包括他们的 first_namelast_name`,并返回一个列表,其中包含两个提供的列表中的所有学生,包括每个学生他们的“first_name”、“last_name”和“group”。所有现有的学生都应保持在活动开始时的同一组中。这些组是:红色、黄色、绿色和蓝色。所有具有相同姓氏的学生都应分配到同一组。学生总数总是能被 4 整除。

existing_students = [
        {"first_name":"Emily", "last_name":"Brown", "group":"Red"}
    ]
    new_students = [
        {"first_name":"Rodney", "last_name":"Bates"},
        {"first_name":"Gaspard", "last_name":"Lenger"},
        {"first_name":"Troy", "last_name":"Liu"}
    ]

existing_students = [
        {"first_name":"Emily", "last_name":"Lenger", "group":"Red"}
    ]
    new_students = [
        {"first_name":"Rodney", "last_name":"Bates"},
        {"first_name":"Gaspard", "last_name":"Lenger"},
        {"first_name":"Troy", "last_name":"Liu"},
        {"first_name":"Sophia", "last_name":"Childs"},
        {"first_name":"Amber", "last_name":"Ash"},
        {"first_name":"Aaron", "last_name":"Hong"},
        {"first_name":"Luke", "last_name":"Malloy"}
    ]
existing_students = [
        {"first_name":"Emily", "last_name":"Lenger", "group":"Red"}
    ]
    new_students = [
        {"first_name":"Rodney", "last_name":"Bates"},
        {"first_name":"Gaspard", "last_name":"Lenger"},
        {"first_name":"Troy", "last_name":"Liu"},
        {"first_name":"Sophia", "last_name":"Childs"},
        {"first_name":"Amber", "last_name":"Malloy"},
        {"first_name":"Aaron", "last_name":"Hong"},
        {"first_name":"Luke", "last_name":"Malloy"}
    ]
existing_students = [
        {"first_name":"Emily", "last_name":"Lenger", "group":"Red"},
        {"first_name":"Rodney", "last_name":"Bates", "group":"Yellow"},
        {"first_name":"Gaspard", "last_name":"Lenger", "group":"Red"},
        {"first_name":"Troy", "last_name":"Liu", "group":"Green"},
        {"first_name":"Sophia", "last_name":"Childs", "group":"Yellow"},
        {"first_name":"Amber", "last_name":"Malloy", "group":"Blue"},
        {"first_name":"Aaron", "last_name":"Hong", "group":"Green"},
        {"first_name":"Luke", "last_name":"Malloy", "group":"Blue"}
    ]
    new_students = [
        {"first_name":"Emil", "last_name":"Malloy"},
        {"first_name":"Paulina", "last_name":"Hart"},
        {"first_name":"Chris", "last_name":"Storm"},
        {"first_name":"Nina", "last_name":"Bates"}
    ]
  • 写回答

9条回答 默认 最新

  • 爱音斯坦牛 全栈领域优质创作者 2023-01-17 18:06
    关注

    是这个意思不?首先定义了一个字典 groups 用来存储每个组的学生,然后对于现有学生创建了一个字典 existing_students_dict,用来存储每个学生的姓氏和他们所在的组。对于新生,如果他们的姓氏已经在 existing_students_dict 中,就把他们分配到相同的组,否则就按照颜色顺序分配组并加入 existing_students_dict(你题目没说,我按颜色顺序加了,也就是%4处理,具体你看代码)。最后返回所有学生的列表。
    代码如下,有帮助的话记得采纳一下哦!

    # last_name为姓
    def divide_students(existing_students, new_students):
        groups = {'Red':[], 'Yellow':[], 'Green':[], 'Blue':[]}
        # 刚开始将老生加入到groups中,用于最后遍历输出
        for old_student in existing_students:
            old_group = old_student["group"]
            groups[old_group].append({'first_name': old_student["first_name"], 'last_name': old_student["last_name"],
                                      'group': old_student["group"]})
        # 分离出老生的last_name(姓)和group,转换成字典
        existing_students_dict = {student['last_name']:student['group'] for student in existing_students}
        # 对于新生便历判断
        for student in new_students:
            last_name = student['last_name']
            first_name = student['first_name']
            # 姓在existing_students_dict字典中,组是老生同姓的组
            if last_name in existing_students_dict:
                group = existing_students_dict[last_name]
            else:
                # 不在老生组中的姓的学生,按颜色顺序分组
                group = list(groups.keys())[len(existing_students_dict) % 4]
                existing_students_dict[last_name] = group
            # 将新生加入到groups中
            groups[group].append({'first_name':first_name, 'last_name':last_name, 'group':group})
    
        result = []
        # 遍历groups中的所有值,这个值为列表,然后遍历列表,将每个学生信息加入到result列表中返回
        for group in groups.values():
            for student in group:
                result.append(student)
    
        return result
    
    
    existing_students = [
            {"first_name":"Emily", "last_name":"Lenger", "group":"Red"}
        ]
    new_students = [
        {"first_name":"Rodney", "last_name":"Bates"},
        {"first_name":"Gaspard", "last_name":"Lenger"},
        {"first_name":"Troy", "last_name":"Liu"},
        {"first_name":"Sophia", "last_name":"Childs"},
        {"first_name":"Amber", "last_name":"Ash"},
        {"first_name":"Aaron", "last_name":"Hong"},
        {"first_name":"Luke", "last_name":"Malloy"}
    ]
    
    print(divide_students(existing_students, new_students))
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(8条)

报告相同问题?

问题事件

  • 系统已结题 1月26日
  • 已采纳回答 1月18日
  • 修改了问题 1月17日
  • 修改了问题 1月17日
  • 展开全部

悬赏问题

  • ¥15 使用yolov5-7.0目标检测报错
  • ¥15 对于这个问题的解释说明
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥20 java在应用程序里获取不到扬声器设备