访问列表中生成的对象

问题描述 投票:0回答:1

所以我一直在Python中练习OOP,并决定采用我之前编写的程序并使用OOP方法对其进行更新。基本上,这是一款游戏,它会询问您正在与多少玩家一起玩,并使用理解生成一个列表并将其显示为记分板。我现在使用 OOP 运行所有玩家回合命令,并尝试使用列表理解生成多个玩家对象。

用于生成玩家的代码如下:

player_amount = int(input("How many players would you like to play with? "))
max_points = int(input("How many points would you like to play to? "))
scoreboard = [0 for _ in range(player_amount)]
players = [pg.Player for _ in range(player_amount)]

问题代码是我尝试访问它们以运行playerTurn命令的下一个块:

while max(scoreboard) < max_points:
        for i in players:

            print(f"Player {players.index(i) + 1}'s turn!")

            if input("Would you like to roll? ") != 'y':
                players[i].updateTotal()
                scoreboard[i] = players[i].total_score
            else:
                players[i].playerTurn()

使用此代码,我可以看到该列表实际上从我的 Player 类生成并存储了多个对象,但是当涉及到访问和操作它们时,我遇到了问题。

python oop list-comprehension
1个回答
0
投票

问题 1:创建玩家对象 在“players = [pg.Player for _ in range(player_amount)]”行中,您实际上并没有创建新的 Player 实例;而是创建了新的 Player 实例。您将 Player 类本身多次存储在列表中。要创建新实例,您应该调用构造函数,如下所示:players = [pg.Player() for _ in range(player_amount)]。

问题 2:在循环中访问播放器对象 在循环中,您使用 i 作为对象本身,而不是索引。这导致了诸如players[i].updateTotal()和scoreboard[i] =players[i].total_score之类的行中的问题。

player_amount = int(input("How many players would you like to play with? "))

max_points = int(input("你想玩到多少分?")) 记分板 = [0 for _ in range(player_mount)]

创建 Player 实例

players = [pg.Player() for _ in range(player_amount)]

同时最大(记分板)< max_points: for i, player in enumerate(players):

    print(f"Player {i + 1}'s turn!")

    if input("Would you like to roll? ") != 'y':
        player.updateTotal()
        scoreboard[i] = player.total_score
    else:
        player.playerTurn()

以下是主要变化:

Player 的实例是在玩家列表中使用 pg.Player() 创建的。 for循环中使用枚举函数来获取索引i和Player对象player。

© www.soinside.com 2019 - 2024. All rights reserved.