You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 04:25:01