You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python OOP游戏开发问题:列表中生成的Player对象无法访问

问题分析与修复方案

1. 生成Player实例的错误

你当前生成玩家列表的代码没有创建Player类的实例,只是把类本身重复添加到了列表中:

# 错误写法:仅存储类,未创建实例
players = [pg.Player for _ in range(player_amount)]

正确做法是调用类的构造函数(加括号)来创建实例:

# 正确写法:创建Player类的实例
players = [pg.Player() for _ in range(player_amount)]

2. 循环中访问对象的错误

在后续循环里,for i in players中的i是Player对象,不是列表索引。你用players[i]去访问元素会触发类型错误,因为列表索引必须是整数。另外players.index(i)的写法不够规范,建议用enumerate同时获取索引和对象:

修正后的循环代码:

while max(scoreboard) < max_points:
    # enumerate同时获取索引和对应Player对象
    for player_idx, current_player in enumerate(players):
        print(f"Player {player_idx + 1}'s turn!")
        if input("Would you like to roll? ") != 'y':
            current_player.updateTotal()
            scoreboard[player_idx] = current_player.total_score
        else:
            current_player.playerTurn()

修正说明

  • 用pg.Player()替代pg.Player,确保列表中存储的是可调用方法的类实例
  • 用enumerate遍历,直接拿到每个玩家的索引和实例,避免索引和对象混淆的问题
  • 直接通过current_player调用方法,逻辑更直观,也避免了索引错误

内容的提问来源于stack exchange,提问作者Charlie Jandura

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 12:05:01