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
相关产品推荐
相关产品推荐

