Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中迭代类对象列表_Python_Loops_Iterator - Fatal编程技术网

如何在Python中迭代类对象列表

如何在Python中迭代类对象列表,python,loops,iterator,Python,Loops,Iterator,我试图迭代类对象/模块对象列表以检查冲突,并引发以下错误: File "C:/Users/travi/PycharmProjects/game/main.py", line 81, in <module> if collision.collision1.is_collision(player.player1.vel, player.player1.x1, player.player1.x2, player.player1.y1, player.player1.y2, enviro

我试图迭代类对象/模块对象列表以检查冲突,并引发以下错误:

  File "C:/Users/travi/PycharmProjects/game/main.py", line 81, in <module>
if collision.collision1.is_collision(player.player1.vel, player.player1.x1, player.player1.x2, player.player1.y1, player.player1.y2, environmentVector[i].x1, environmentVector[i].x2, environmentVector[i].y1, environmentVector[i].y2):
TypeError: list indices must be integers or slices, not environment
environment.py:

import pygame

class environment():
    def __init__(self, x, y, width, height):
        self.x = x
        self.y = y
        self.x1 = x - 16
        self.x2 = x + 16
        self.y1 = y - 16
        self.y2 = y + 16
collision.py:

import pygame
import player
import enemy
import environment

class collision():
    def __init__(self):
        self.collision = False

    def is_collision(self, moveSpeed, x1, x2, y1, y2, X1, X2, Y1, Y2):
        if (((x2 + moveSpeed >= X1) and (x2 <= X2)) and (((y2 >= Y1) and (y2 <= Y2)) or ((y1 <= Y2) and (y1 >= Y1)))) or (((x1 - moveSpeed <= X2) and (x1 >= X1)) and (((y2 >= Y1) and (y2 <= Y2)) or ((y1 <= Y2) and (y1 >= Y1)))):
            return True
        else:
            return False
导入pygame
进口球员
输入敌人
导入环境
类冲突():
定义初始化(自):
self.collision=False
def是_碰撞(自身、移动速度、x1、x2、y1、y2、x1、x2、y1、y2):

if((x2+moveSpeed>=X1)和(x2=Y1)和(y2=Y1)和(y2Python
for
循环是“for each”类型的循环,这与C和其他一些语言中传统的
for
循环不同。在每次迭代中,循环变量(
i
)是容器中的下一个元素。 假设
vec
std::vector
类型,在C++中:

for (size_t i = 0; i != vec.size(); ++i){
    std::cout << vec[i] << std::endl;
}
如您所见,
i
是元素本身,而不是它的索引

话虽如此,这就是修复for循环的方法:

for i in environmentVector:
    if collision.collision1.is_collision(player.player1.vel, player.player1.x1, player.player1.x2, player.player1.y1, player.player1.y2, i.x1, i.x2, i.y1, i.y2):
        print("collision")
注意,我将
environmentVector[I]
s替换为
I
s

如果您确实需要索引,可以使用:
lst
再次假定为
list
对象):


在这里,在每次迭代中,您都会得到分配给
indx
的索引和分配给
obj

Python
for
的对象本身,for
循环是“for each”类型的循环,这与传统的
for
循环在C和其他一些语言中不同。在每次迭代中,循环变量(
i
)是容器中的下一个元素。 假设
vec
std::vector
类型,在C++中:

for (size_t i = 0; i != vec.size(); ++i){
    std::cout << vec[i] << std::endl;
}
如您所见,
i
是元素本身,而不是它的索引

话虽如此,这就是修复for循环的方法:

for i in environmentVector:
    if collision.collision1.is_collision(player.player1.vel, player.player1.x1, player.player1.x2, player.player1.y1, player.player1.y2, i.x1, i.x2, i.y1, i.y2):
        print("collision")
注意,我将
environmentVector[I]
s替换为
I
s

如果您确实需要索引,可以使用:
lst
再次假定为
list
对象):


在这里,在每次迭代中,您都会得到分配给
indx
的索引和分配给
obj

环境向量[i].x1->i.x1的对象本身。Python循环用于每个循环。在每次迭代中,
i
是环境对象本身,而不是计数器。这是大量冗余的
(…)
环境向量[i].x1->i.x1Python循环用于每个循环。在每次迭代中,
i
是环境对象本身,而不是计数器。这是大量冗余的
(…)
for indx, obj in enumerate(lst):
    print(indx, obj)