Генерация пар студентов из списка имен, новые пары каждую неделю - PullRequest
0 голосов
/ 21 октября 2018

У меня есть список имен учеников, и я хочу связывать каждого ученика с другим учеником каждую неделю.Очевидно, что студенты могут быть только в одной паре каждую неделю, и студенты никогда не должны работать с кем-то, с кем они уже работали ранее.Я могу сгенерировать список кортежей каждой возможной пары, которую я могу составить с моим списком имен учеников, но я изо всех сил пытаюсь взять эти пары и генерировать списки пар для каждой недели.

1 Ответ

0 голосов
/ 21 октября 2018

То, что вы запрашиваете, - это алгоритм планирования для кругового турнира .Вот один из способов реализовать это в Python:

def round_robin(n):
    if n % 2:
        raise ValueError("Can't pair an odd number of students")
    half = n // 2
    students = list(range(1, n + 1))
    for round in range(n - 1):
        students.append(students.pop(1))
        pairs = list(zip(students[:half], students[:half-1:-1]))
        print(pairs)

И вот он в действии:

>>> round_robin(8)
[(1, 2), (3, 8), (4, 7), (5, 6)]
[(1, 3), (4, 2), (5, 8), (6, 7)]
[(1, 4), (5, 3), (6, 2), (7, 8)]
[(1, 5), (6, 4), (7, 3), (8, 2)]
[(1, 6), (7, 5), (8, 4), (2, 3)]
[(1, 7), (8, 6), (2, 5), (3, 4)]
[(1, 8), (2, 7), (3, 6), (4, 5)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...