Ошибка индекса Python при использовании цикла for и списка - PullRequest
0 голосов
/ 03 мая 2019

Я новичок, и я хотел написать простую игру, используя черепаху.Идея состоит в том, чтобы иметь одного игрока и нескольких врагов.Когда игрок поражает противника, противник меняет положение (случайно).Но когда я создавал цикл for для создания нескольких вражеских объектов, я получил эту ошибку индекса:

Traceback (most recent call last):
  File "/Users/name/PycharmProjects/untitled1/Testing", line 5, in <module>
    enemys[count].append(turtle.Turtle())
IndexError: list index out of range

Я попытался использовать range(0, len(enemys)), но тогда он не делает то, что я хочу, он не будетсоздавать врагов, так как длина enemys равна нулю.Вот мой код:

import turtle    
maxEnemies = 6
enemys= []
for count in range(0, maxEnemies):
    enemys[count].append(turtle.Turtle())
    enemys[count].speed(0)
    enemys[count].shape("circle")
    enemys[count].color("red")
    enemys[count].penup()
    enemys[count].setpos(random.randint(-300, 300), random.randint(-300, 300))

Я ожидал, что он сделает 6 объектов, все красные, кружки и т. Д.

Ответы [ 2 ]

1 голос
/ 03 мая 2019

Вы можете сделать это так, даже если честно, вам даже не нужна переменная count.

import turtle    
maxEnemies = 6
enemys= []
for _ in range(0, maxEnemies):
    enemy = turtle.Turtle()
    enemy.speed(0)
    enemy.shape('circle')
    enemy.color('red')
    enemy.penup()
    enemy.setpos(random.randint(-300, 300), random.randint(-300, 300))
    enemys.append(enemy)

Я не знаю много о turtle, так что синтаксис может быть немного не таким.

0 голосов
/ 03 мая 2019

enemys[count].append() добавит значение в список, так как вы используете его в элементе списка enemys, оно попытается добавить в список внутри enemys, но оно пустое, поэтому выдает ошибку. Это правильный код:

for count in range(0, maxEnemies):
    enemys.append(turtle.Turtle())
    enemys[count].speed(0)
    enemys[count].shape("circle")
    enemys[count].color("red")
    enemys[count].penup()
    enemys[count].setpos(random.randint(-300, 300), random.randint(-300, 300))
...