Python随机运动日程生成器

Python随机运动日程生成器,python,Python,我发现如下 每次运行时都会生成相同的计划。。如果我在其中添加一个random.shuffle(),它仍然太容易预测 下面是我对那篇文章的简单编辑,随机出现,我得到了奇怪的结果 import random def round_robin(units, sets = None): """ Generates a schedule of "fair" pairings from a list of units """ count = len(units) sets = se

我发现如下

每次运行时都会生成相同的计划。。如果我在其中添加一个random.shuffle(),它仍然太容易预测

下面是我对那篇文章的简单编辑,随机出现,我得到了奇怪的结果

import random

def round_robin(units, sets = None):
    """ Generates a schedule of "fair" pairings from a list of units """
    count = len(units)
    sets = sets or (count - 1)
    half = count / 2

    for turn in range(sets):
        left = units[:half]
        right = units[count - half - 1 + 1:][::-1]
        pairings = zip(left, right)
        if turn % 2 == 1:
            pairings = [(y, x) for (x, y) in pairings]
        units.insert(1, units.pop())

        yield pairings


teams = range(5)
random.shuffle(teams)
schedule = list(round_robin(teams, sets = len(teams) * 2 - 2))

for week in schedule:
    for game in week:
        if 0 in game:
            print game
有时候,两支球队似乎甚至不会相互比赛。。看到结果了吗

(0, 4)
(4, 0)
(0, 2)
(0, 4)
(4, 0)
(0, 2)
我的问题是。。我如何在python中创建一个随机计划生成器,或者修复我已经拥有的


基本上我需要4支球队,在3周的比赛中,他们相互比赛一次。或者像5支球队,他们有5周的比赛时间,他们都互相比赛一次,但每周有一支球队被排除在外

我假设每支球队都需要与另一支球队一起比赛。不是吗?那么这个问题不是可以归结为简单的排列,然后洗牌结果吗

import itertools
import random
set_size = 2
schedule = set()
teams = range(5)
for comb in itertools.product(teams, repeat=set_size):
    comb = sorted(list(comb))
    if len(set(comb)) == set_size:
        schedule.add(tuple(comb))

schedule = list(schedule)
random.shuffle(schedule)
print schedule

我不知道有什么问题。对不起。。。在底部添加的问题这不是正确答案。你可能仍然会在同一支球队中连续踢两次或更多。但每个队每次比赛只能进行一次(根据OP示例,每周进行一次)。因此,日程安排必须列出每周最多比赛一次的比赛项目。