如何在Python中随机分配22人至A、B两队且每队限11人?
问题解答
问题1:生成固定数量的随机'A'/'B'序列
要生成22个包含11个'A'和11个'B'的随机序列,最直接的方式是先构造对应数量的字符列表,再打乱顺序:
import random # 初始化包含11个A和11个B的列表 char_sequence = ['A'] * 11 + ['B'] * 11 # 随机打乱列表顺序 random.shuffle(char_sequence) print(char_sequence)
这种方式既保证了每个字符恰好出现11次,又通过打乱实现了随机性,完全满足需求。
问题2:实现固定人数的队伍分配
你的现有代码无法控制队伍人数上限,核心原因是没有跟踪每队的当前人数。可以通过给Footballist类添加静态变量记录两队人数,分配时仅从还有空位的队伍中随机选择:
import random class Human: def __init__(self, name): self.name = name class Footballist(Human): # 静态变量:记录两队当前人数,以及每队最大容量 team_a_count = 0 team_b_count = 0 MAX_TEAM_SIZE = 11 def assign_team(self): # 筛选出还有空位的队伍 available_teams = [] if self.team_a_count < self.MAX_TEAM_SIZE: available_teams.append('A') if self.team_b_count < self.MAX_TEAM_SIZE: available_teams.append('B') # 从可用队伍中随机分配 self.team = random.choice(available_teams) # 更新对应队伍的人数 if self.team == 'A': self.team_a_count += 1 else: self.team_b_count += 1 print(f'{self.name} is in {self.team} team') # 测试:分配22名球员 player_names = [f'Player{i+1}' for i in range(22)] for name in player_names: player = Footballist(name) player.assign_team()
关键改进点:
- 用静态变量
team_a_count和team_b_count全局跟踪两队人数 - 每次分配前先判断哪些队伍还有空位,避免分配到已满的队伍
- 遵循PEP8规范调整了类名(大驼峰命名),并将方法名改为更贴合功能的
assign_team
内容的提问来源于stack exchange,提问作者PDK
相关产品推荐
相关产品推荐

