Python如何检查列表重复元素并在每组满3人时终止while循环
问题修正方案
原代码存在的问题
- 缺少
random模块导入,随机分组功能无法正常运行 - 每次循环都会重新初始化可用名单列表,无法实现已分配姓名去重
- 向分组列表中追加的是组号数字而非姓名,无法实现人员信息的正确存储与校验
- 循环条件设置错误:当前
len(group_1) <= 3 and len(group_2) <= 3会在两个组都达到3人时仍满足条件,导致分组人数超过3人的上限 - 没有对随机分配的组进行容量校验,可能出现单组人数超出3人的情况
修正后代码
import random def get_group(): group_1 = [] group_2 = [] # 可用名单移到循环外部,方便动态删除已分配人员 available_names = ["Tomás", "Fábio", "Rita", "Dany", "Inês", "Ana"] # 只要任意一组未满3人就继续循环,总人数刚好匹配两个组各3人的需求 while len(group_1) < 3 or len(group_2) < 3: name = input("Tell me your name: ") if name in available_names: # 优先判断组容量,避免分配到已满的组 if len(group_1) >= 3: given_group = 2 elif len(group_2) >= 3: given_group = 1 else: given_group = random.randint(1, 2) # 向分组追加用户姓名而非组号 if given_group == 1: group_1.append(name) else: group_2.append(name) # 移除已分配姓名,防止重复录入 available_names.remove(name) print("You are in group " + str(given_group)) else: print("Name not available") else: print("Finish") get_group()
调整说明
- 动态维护可用名单,每次成功分配后删除对应姓名,从根源避免重复分配问题
- 优化循环条件和分组分配逻辑,严格保证每个组的人数不超过3人,两个组都满员后自动终止循环
- 修正分组数据存储逻辑,存入的是用户姓名而非无意义的组号数字,方便后续扩展人员查询功能
内容的提问来源于stack exchange,提问作者Tomas Azevedo
相关产品推荐
相关产品推荐

