我正在尝试创建一个函数,其中将范围1到X的列表放入由2对组成的列表中,然后将这对对洗净X-1次,以使X-1次出现在1,.. X中将i,j配对,其中i,j永远不相同。
这对是囚徒困境游戏中的玩家,他们与陌生人完美匹配。因此,我希望每个玩家都必须玩X-1
个游戏,即与其他每个玩家对战一次。
播放器以[1,2,3,...X]
的形式存储在列表中。这些对存储在列表[[1,2],[2,3],...]
的列表中。
到目前为止,我已经能够创建第一轮,现在我想更改玩家列表,以便下一轮具有不同的对。我想这样做X-1次,但是(如我所说)应该没有重复的对。
players = list(range(1, int(input()+1)))
rounds = list(range(1, len(players)))
for round in rounds:
pairs = []
for idx, i in enumerate(players):
a = players[idx]
b = players[idx-1]
if b > len(players):
continue
else:
pairs.append([b,a])
for idx, x in enumerate(pairs):
c = pairs[idx]
d = pairs[idx-1]
if c[0] == d[1]:
pairs.remove(c)
print(pairs)
所以现在我需要更改一些内容,然后使用轮数对for循环进行迭代...
我在循环中尝试过此操作
players.append(players[1])
players.remove(players[1])
我的输出当前看起来像这样:
8
[[1, 2], [3, 4], [5, 6], [7, 8]]
[[1, 3], [4, 5], [6, 7], [8, 2]]
[[1, 4], [5, 6], [7, 8], [2, 3]]
[[1, 5], [6, 7], [8, 2], [3, 4]]
[[1, 6], [7, 8], [2, 3], [4, 5]]
[[1, 7], [8, 2], [3, 4], [5, 6]]
[[1, 8], [2, 3], [4, 5], [6, 7]]
任何想法都会受到赞赏,并在此先感谢。