【发布时间】:2013-10-02 22:20:09
【问题描述】:
代码来自一个程序,该程序使用 Python 和 Pygame 使球在屏幕上移动。所有的类和函数只处理数据操作,这里的主要类是Particle。所有实际的构造和函数调用都发生在这几行中:
number_of_particles = 10
my_particles = []
for n in range(number_of_particles):
size = random.randint(20, 20)
x = random.randint(size, width-size)
y = random.randint(size, height-size)
color = (100,0,100)
particle = Particle(x, y, color, size)
particle.speed = 1
particle.angle = random.uniform(0, math.pi*2)
my_particles.append(particle)
running = True
while running:
screen.fill(background_color)
for i, particle in enumerate(my_particles):
particle.move()
particle.getnumber()
particle.bounce()
for particle2 in my_particles[i+3:]:
collide(particle, particle2)
particle.display()
pygame.display.flip()`
我知道该列表保存对象在内存中的位置,并且用于创建它们的 for 循环没有命名它们,但确实为它们提供了单独的参数。创建循环之后的功能循环遍历所有对象并更新它们的状态,碰撞函数发生在循环内部,循环遍历功能循环中未迭代的所有其他粒子。我不明白的是它是如何选择这些对象并引用它们而不显式调用它们的名称(这是不存在的)或它们的相对索引,因为有 10 个项目。这段代码实际上在这些循环中做了什么,最终在这些循环中做了什么?
【问题讨论】:
-
第二个循环运行十次,列表中的每个项目运行一次。
for i, particle in enumerate(my_particles):表示这十次中的每一次,它将列表中的不同项目分配给变量particle。这有意义吗? -
你是在问python
for循环如何在没有索引的情况下工作?
标签: python list for-loop pygame nested