class Player(object): def __init__(self, name): self.name = name def __str__(self): return self.name class Game(object): def __init__(self, a, b): self.a = a self.b = b def __str__(self): return "(winner of %s vs. %s)" % (self.a, self.b) players = [Player(x) for x in 'abcdefghi'] this_round_players = players[:] # players to go forward into the next round rounds = [] while len(this_round_players) > 1: games = [] # list of games in this round while len(this_round_players) > 1: a, b = this_round_players[0:2] # match the first two players del this_round_players[0:2] # remove them from the list games.append(Game(a, b)) # create new Game object, and add it to the games list rounds.append(games) if len(this_round_players) > 0: odd_one_out = this_round_players[0] else: odd_one_out = None # The winners of these games play in the next round this_round_players = games[:] if odd_one_out: this_round_players.append(odd_one_out) # We have a winner! print "And the winner is..." print this_round_players[0]