Получение ошибки в цикле for с использованием массивов numpy - PullRequest
0 голосов
/ 08 апреля 2019

Я делаю игру и получаю сообщение об ошибке: "IndexError: только целые числа, кусочки (:), многоточие (...), numpy.newaxis (None) и целые или логические массивыдопустимые индексы. "

В следующем блоке кода play_game - это функция, которая возвращает строку, а roll_dice - случайный массив.По сути, я пытаюсь получить все строки в массив, так что в total_games.Тем не менее, я не могу сделать это из-за этой ошибки, которая я точно не знаю, что это значит.Если бы кто-то мог уточнить, что означает ошибка или как я могу исправить этот код, он был бы очень признателен.

def game_session(num_games=50):
    total_games = np.zeros(num_games)
    for i in total_games:
        total_games[i] = play_game(roll_dice())
    return total_games

Ответы [ 2 ]

1 голос
/ 08 апреля 2019

Вы не можете ввести строку в np.array типа np.float64, так как эта структура данных содержит только один тип (по умолчанию np.float64, как в этом примере).

Что вам нужно, это обычный Python's list, попробуйте этот код:

def game_session(num_games=50):
    total_games = []
    for _ in range(num_games):
        total_games.append(play_game(roll_dice()))
    return total_games

@ Loocid ответ также верен, с вашим кодом много проблем.

На самом деле вы можете (и, вероятно, должны) сделать это более питоническим, как это:

def game_session(num_games=50):
    return [play_game(roll_dice()) for _ in range(num_games)]
1 голос
/ 08 апреля 2019

.zeros создает массив нулей с плавающей запятой (0.0).

Когда вы делаете for i in total_games, i всегда будет 0.0 и, очевидно, total_games[0.0] не может бытьсделано по той причине, что ваше сообщение об ошибке выдвигается.

Я верю, что вы хотите for i in range(len(total_games)), который будет перебирать знаки total_games, то есть 0, 1, 2, 3, ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...