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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 05:27:26