Я пытаюсь сделать рандомизатор блока статистики персонажа с определенной настройкой (потому что я ботаник), где он в основном «выбрасывает D6» 4 раза и удаляет наименьшее число. однако, когда я пытаюсь удалить наименьшее число из списка, иногда я получаю сообщение «IndexError: pop index out of range» каждые 20 или около того итераций. Что я делаю не так?
def stat_dice():
four_rolls = []
for _ in range(1,5):
item = random.randint(1,6)
four_rolls.append(item)
min_num = min(four_rolls)
index = four_rolls.index(min_num)
four_rolls.pop(four_rolls[index])
КАК говорит ошибка, ваш индекс выходит за пределы диапазона, это происходит потому, что
four_rolls.pop(four_rolls[index])
этот loc дает элемент в four_rolls[index] в качестве индекса для всплывающего окна, которого может не быть в списке, поэтому измените его на:
four_rolls.pop(index)
.pop()
принимает индекс элемента, а не элемент, который нужно удалить. .remove()
берет предмет для удаления:
import random
def stat_dice():
# list comprehension to generate die values
rolls = [random.randint(1,6) for _ in range(4)]
print('debug: before removal',rolls)
rolls.remove(min(rolls))
print('debug: after removal',rolls)
return sum(rolls)
print(stat_dice())
Выход:
debug: before removal [5, 4, 5, 4]
debug: after removal [5, 5, 4]
14
Обратите внимание, что в приведенном выше примере .pop(4)
сгенерирует IndexError
, потому что допустимые индексы 0-3 для 4-элементного списка. .remove(4)
удаляет первый найденный 4
в списке.