3

私は、ユーザーが偶数のプレーヤーを入力できるようにするプログラムを作成しており、ラウンド ロビン トーナメント スケジュールを生成します。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
4

2 に答える 2

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)]
于 2013-03-12T04:01:59.347 に答える
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)
于 2013-03-12T04:04:33.013 に答える