Python对决生成器如何避免生成重复对阵(附代码求助)
解决对决生成器的重复对阵问题
你现在的问题是生成对决时会出现同一选手自对阵的情况,比如red vs red,原因是每次都从完整的选手列表里随机选,没排除已选的人。另外你用random.sample(bracket_one, 1)返回的是列表,直接和字符串拼接会报错,这个也得一起修正。
核心解决思路
先把选手列表随机打乱,再按顺序两两分组,这样每个选手只会被分到一组里,彻底避免重复对阵。
修改后的完整代码
import random print("Matchup Generator") bracket_one = ["sub", "gc", "ron", "tame", "clak", "moe", "matic", "kapp"] bracket_two = ["red", "blue", "yellow", "green"] lineup = int(input("Press '1' for bracket one or press '2' for bracket two: ")) if lineup == 1: print("You chose a bracket of 8 competitors. \n The matchups are: \n") # 随机打乱列表顺序 random.shuffle(bracket_one) # 按步长2循环,两两分组生成对阵 for i in range(0, len(bracket_one), 2): matchup = f"{bracket_one[i]} vs {bracket_one[i+1]}" print(matchup) elif lineup == 2: print("You chose a bracket of 4 competitors. \n The matchups are: \n") random.shuffle(bracket_two) for i in range(0, len(bracket_two), 2): matchup = f"{bracket_two[i]} vs {bracket_two[i+1]}" print(matchup) else: print("You did not press '1' or '2'")
关键改动说明
- 用
random.shuffle()直接打乱原列表顺序,保证分组的随机性 - 用步长为2的循环遍历列表,每次取相邻两个元素组成对阵,确保每个选手只出现一次
- 用f-string拼接字符串,既简洁又避免了
random.sample返回列表导致的拼接错误
内容的提问来源于stack exchange,提问作者paixiao
相关产品推荐
相关产品推荐

