所以我试图编写一些包含敌人列表的代码,然后删除敌人,如果他们离开屏幕。代码如下:
for enemy in enemies:
index = 0
enemy[0] += 2
if enemy[1] >= 270:
enemy[2] = -2
else:
enemy[2] = enemy[2] + 0.01
enemy[1] = enemy[1] + enemy[2]
screen.blit(enemyImg, (enemy[0],enemy[1])
if enemy[0] > 470:
enemies.remove(index)
index += 1
我正在使用for循环,这就是为什么它有“敌人”作为列表,但它正在删除列表中的项目“敌人”
存储在“敌人”中的信息是具有x值(索引0),y值(索引1)和y速度(索引2)的列表。敌人没有x速度,因为它们以恒定的速率向右移动。
错误表示语法无效(字面意思是它所说的全部),但我没有看到问题。也许我只是错过了一些愚蠢的东西,但我不确定。感谢您提供任何帮助。
答案 0 :(得分:2)
当项目大于470时,您可以从名为enemies的列表中删除项目。
enemies = [2,500,1,2,4000]
for enemy in enemies:
if enemy > 470:
enemies.remove(enemy)
如果你想使用列表理解(更简洁的代码)来做这件事,你可以这样做:
[enemies.remove(enemy) for enemy in enemies if enemy > 470]
答案 1 :(得分:1)
如果要过滤现有列表,通常最好创建一个新列表,然后将其分配给旧变量名称。您可以使用list comprehension:
在一行中执行此操作m1: x1+x2+x3
m2: x1*x2+x3
m3: x1*x3+x2
m4: x2*x3+x1
m5: x1*x2+x1*x3
m6: x1*x2+x2*x3
m7: x1*x3+x2*x3
m8: x1*x2*x3
这是一个可能更接近您的代码的示例。
>>> enemies = [600, 50, 700, 95, 800, 900, 1000]
>>> enemies = [x for x in enemies if x < 470]
>>> enemies
[50, 95]