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

Python随机选取足球运动员分组出现重复结果如何解决

问题根因

代码出现重复的核心原因是选中球员后没有将该球员添加到已选择的choised列表中,导致每次随机选中的球员判断not in soccer_player.choised永远为真,自然会被重复加入队伍。同时原start_random_choise方法缺少静态方法装饰器,实际运行可能会报参数错误。


方案1:最小改动修复原有逻辑

仅需要在选中球员的逻辑后补充添加到已选列表的代码,同时补充静态方法装饰器即可:

import random

class human:
    'humans class'
    def __init__(self,fname,lname=None,age=None):
        self.fname = fname
        self.lname = lname
        self.age = age

    def new(self,command):
        "for define a new variable"
        return exec(command)


class soccer_player(human):
    "soccer players class"
    
    all_players = []
    choised = []
    a = []
    b = []
    def __init__(self, fname, lname=None, age=None):
        super().__init__(fname, lname=lname, age=age)
        soccer_player.all_players.append(fname)
    
    @staticmethod # 补充静态方法装饰器
    def start_random_choise():
        i=0
        while True:
            choise = random.choice(soccer_player.all_players)
            if choise not in soccer_player.choised:
                soccer_player.a.append(choise)
                soccer_player.choised.append(choise) # 新增:将选中球员标记为已选
                i = i + 1
            if i == 11:
                break
        i=0
        while True:
            choise = random.choice(soccer_player.all_players)
            if choise not in soccer_player.choised:
                soccer_player.b.append(choise)
                soccer_player.choised.append(choise) # 新增:将选中球员标记为已选
                i = i + 1
            if i == 11:
                break

方案2:更简洁的优化实现(推荐)

不需要循环随机选择+重复判断,直接用random.shuffle打乱所有球员列表,再拆分前11个为A队、后11个为B队即可,逻辑更清晰、性能更好,也从根源避免重复问题:

@staticmethod
def start_random_choise():
    # 打乱所有球员列表
    random.shuffle(soccer_player.all_players)
    # 直接拆分列表分配队伍
    soccer_player.a = soccer_player.all_players[:11]
    soccer_player.b = soccer_player.all_players[11:]

该方案不需要维护choised列表,代码量大幅减少。


输出格式优化(可选)

原循环输出末尾会多一个多余的逗号,可直接用join方法优化输出:

print("A:", " , ".join(soccer_player.a))
print("B:", " , ".join(soccer_player.b))

内容的提问来源于stack exchange,提问作者smartnima

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:45:04