Итак, я практиковался с ООП в Python и решил взять программу, которую написал ранее, и обновить ее с использованием методологии ООП. По сути, это игра, в которой вас спросят, со сколькими игроками вы играете, сгенерирует список, используя понимание, и отобразит его в виде табло. Сейчас я использую ООП для запуска всех команд поворота игрока и пытаюсь создать несколько объектов игрока, используя понимание списка.
Код, используемый для генерации игроков, выглядит следующим образом:
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, но когда дело доходит до доступа к ним и управления ими, у меня возникают проблемы.
1 ответ
Проблема 1. Создание объектов Player В строке player = [pg.Player for _ in range(player_amount)] вы фактически не создаете новые экземпляры Player; вы сохраняете сам класс Player в списке несколько раз. Чтобы создать новые экземпляры, вам следует вызвать конструктор, например: player = [pg.Player() for _ in range(player_amount)].
Проблема 2. Доступ к объектам Player в цикле. В цикле вы используете i как сам объект, а не индекс. Это вызывает проблему в таких строках, как player[i].updateTotal() и Scoreboard[i] = player[i].total_score.
player_amount = int(input("How many players would you like to play with? "))
Max_points = int(input("Сколько очков вы хотели бы сыграть?")) Scoreboard = [0 for _ in range(player_amount)]
Создание экземпляров игрока
Игроки = [pg.Player() для _ в диапазоне (player_amount)]
While max(табло) < max_points: для i игрок в перечислении(игроки):
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() в списке игроков. Функция enumerate используется в цикле for для получения индекса i и объекта Player.
Похожие вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.
for player in players:
?