Ошибка, вызванная попыткой найти индекс того, чего больше нет в списке - PullRequest
0 голосов
/ 20 января 2019

Я студент, работающий с python, чтобы сделать простую игру.Всякий раз, когда умирает последний персонаж, я получаю builtins.ValueError: (A health value) is not in list Я пытаюсь найти наименьшее количество здоровья в списке персонажей и вычесть урон из его здоровья.Ошибка происходит в character_health_list.index(lowest_health) в моем коде.

character_health_list = [character_list[0].health, 
                         character_list[1].health,
                         character_list[2].health, 
                         character_list[3].health]

for i in range(len(character_list)):     
    if character_list[i].health > 0:
        lowest_health = min(i for i in character_health_list if i > 0)    

# Damage that the enemy does
for i in range(len(enemy_list)):
    lowest_health_char = character_health_list.index(lowest_health)

Ответы [ 2 ]

0 голосов
/ 20 января 2019

Так вот в чем дело, я не уверен, что в вашем списке персонажей есть только эти 4 элемента, как вы упомянули. Поэтому, если я возьму, что список здоровья вашего персонажа содержит только 4 элемента, возможно, что когда вы выполняете итерацию по всему character_list, их будет больше, чем 4 элемента, и свойство health одного из этих дополнительных элементов будет считается как lowest_health

Предполагая, что персонаж мёртв, когда его здоровье равно 0, вам нужно получить наименьшее количество здоровья из живых, вы можете сделать это лучше, как это

# get all the health
character_health_list = [character.health for character in character_list if character.health > 0]

# get the lowest health from character_list
lowest_health = min(health for health in character_health_list)

# now get the index
health_index = character_health_list.index(lowest_health)
0 голосов
/ 20 января 2019

lowest_health не установлен на индекс персонажа с наименьшим здоровьем, он установлен на значение здоровья персонажа. В настоящее время ваша настройка цикла немного неэффективна, так как находит самое низкое значение, а затем работает в обратном направлении, чтобы найти индекс символа с самым низким значением. Вероятно, было бы проще переписать его примерно так:

# index of character with lowest health
lowest_health = 0

for i in range(len(character_list)):
    # check that health is greater than 0 and less than the current minimum
    if (character_health_list[i] > 0 and
        character_health_list[i] < character_health_list[lowest_health]):
        lowest_health = i

Редактировать: я не видел .index звонок

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