Python随机运动日程生成器
我发现如下 每次运行时都会生成相同的计划。。如果我在其中添加一个random.shuffle(),它仍然太容易预测 下面是我对那篇文章的简单编辑,随机出现,我得到了奇怪的结果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
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示例,每周进行一次)。因此,日程安排必须列出每周最多比赛一次的比赛项目。