循环赛锦标赛的python程序

时间:2013-03-12 03:56:48

标签: python

我正在编写一个程序,允许用户输入甚至数量的玩家,然后它将生成循环赛锦标赛计划。 n/2 * n-1个游戏数量,以便每个玩家与其他玩家一起玩。

现在我很难生成用户输入的玩家数量列表。我收到此错误:

  

TypeError:' int'对象不可迭代。

我的程序中出现了很多这样的错误,所以我想我并不完全理解Python的这一部分,所以如果有人能够解释这一点,我也会很感激。

def rounds(players, player_list):
    """determines how many rounds and who plays who in each round"""
    num_games = int((players/2) * (players-1))
    num_rounds = int(players/2)
    player_list = list(players)
    return player_list

2 个答案:

答案 0 :(得分:6)

如果您只想获得一个数字列表,您可能需要range()函数。

对于实际的循环赛,您应该查看itertools.combinations

>>> n = 4
>>> players = range(1,n+1)
>>> players
[1, 2, 3, 4]
>>> list(itertools.combinations(players, 2))
[(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]

答案 1 :(得分:4)

player_list= list(players)

是什么引发了TypeError。发生这种情况是因为list()函数只知道如何对可以迭代的对象进行操作,并且int不是这样的对象。

从评论中,您似乎只想创建一个包含玩家编号(或名称或索引)的列表。你可以这样做:

# this will create the list [1,2,3,...players]:
player_list = range(1, players+1) 
# or, the list [0,1,...players-1]: 
player_list = range(players) #  this is equivalent to range(0,players)