Ваша исходная задача является только то, что М. Фабр сказал: ваш индекс цикла действует через первую петлю, но не второй. Чтобы исправить это, просто установите index = 0 перед каждым циклом (помните, что Python запускает индексы в 0).
Тем не менее, у вас есть более глубокая проблема в ваших циклах: изменение badguys, в то время как вы повторяете этот список, повредит вам. Попробуйте этот тест некоторое время:
badguys = [0, 1, 2, 3, 4, 5, 6, 7]
for i in badguys:
print "Before:", i, badguys
badguys.pop(i)
print "After: ", i, badguys
Это MCVE за то, что вы делаете код. Вам нужно изменить свою работу, чтобы сохранить исходный список неповрежденным во время его прогона. Поверьте мне, ваша программа не имеет достаточного количества очков для достижения критического удара «индекс за пределами диапазона». :-)
я делаю вывод, что логика что-то вроде этого:
- Удалите плохой парень, который бежал мимо замка (положение < -64).
- Для любого плохого парня, который только что достиг замка, наносите 5-20 урона от HP и удаляйте этого плохого парня.
Я предлагаю два прохода для этого: один, чтобы нанести ущерб (используя оставил в качестве выражения для бокового положения)
if abs(left) <= 64:
# do damage
healthvalue -= random.randint(5,20)
# mark for deletion
left = -999
... и второе, чтобы сделать новый список плохих ребята. Повторите этот список, оставив только те, которые все еще находятся на игровом поле:
badguys = [badguy if badguy.left > -64 for badguy in badguys]
Неужели это избавит вас от неприятностей на данный момент?
Первый цикл увеличивает 'index' до' len (badguys) ', и вы повторно используете эту переменную во втором цикле ... –