For循环Python没有为len运行
我编写了一个for循环(见下文)来检查一个对象实例是否与任何四个其他对象实例发生了碰撞,如果发生了碰撞,函数应该返回一个,以启动另一个反应链。for循环要运行四次——它只运行一次,所以它没有检测到与三个受体的碰撞For循环Python没有为len运行,python,list,loops,for-loop,Python,List,Loops,For Loop,我编写了一个for循环(见下文)来检查一个对象实例是否与任何四个其他对象实例发生了碰撞,如果发生了碰撞,函数应该返回一个,以启动另一个反应链。for循环要运行四次——它只运行一次,所以它没有检测到与三个受体的碰撞 def spriteCollide(neurotransmitter1): print len(receptors) for i in range(len(receptors)): return receptors[i].receptorObjectIn
def spriteCollide(neurotransmitter1):
print len(receptors)
for i in range(len(receptors)):
return receptors[i].receptorObjectInstance.colliderect(neurotransmitter1.neurotransmitterObjectInstance)
如您所见,for循环应该根据包含四个对象地址的列表的长度来运行。经过一段时间的运行,它将第一次运行&然后打破循环
我试着把一切都包括进去
谢谢,循环在第一次到达
return
语句时退出。存储结果,然后返回存储的值:
def spriteCollide(neurotransmitter1):
result = []
print len(receptors)
for i in range(len(receptors)):
result.append(receptors[i].receptorObjectInstance.colliderect(neurotransmitter1.neurotransmitterObjectInstance)
return result
循环在第一次到达
return
语句时退出。存储结果,然后返回存储的值:
def spriteCollide(neurotransmitter1):
result = []
print len(receptors)
for i in range(len(receptors)):
result.append(receptors[i].receptorObjectInstance.colliderect(neurotransmitter1.neurotransmitterObjectInstance)
return result
return
将停止函数并返回值。如果需要所有值,请尝试将它们附加到列表/字典并返回
def spriteCollide(neurotransmitter1, receptors): # add receptors as a param
values = [] # create an empty list to store you processed data
print len(receptors) # I assume this was for testing
for i in range(len(receptors)):
values.append(receptors[i].receptorObjectInstance.colliderect(neurotransmitter1.neurotransmitterObjectInstance)) # appends the reulst of collideDirect() to values
return values # returns the list so you can use it.
您还应该考虑将
接收器
作为函数的参数传递。将所有内容保持在正确的范围内会更容易,如果由于函数外部对接收器的更改而出现错误,则更容易找出原因。返回
将停止函数并返回值。如果需要所有值,请尝试将它们附加到列表/字典并返回
def spriteCollide(neurotransmitter1, receptors): # add receptors as a param
values = [] # create an empty list to store you processed data
print len(receptors) # I assume this was for testing
for i in range(len(receptors)):
values.append(receptors[i].receptorObjectInstance.colliderect(neurotransmitter1.neurotransmitterObjectInstance)) # appends the reulst of collideDirect() to values
return values # returns the list so you can use it.
您还应该考虑将
接收器
作为函数的参数传递。将所有内容都保持在正确的范围内会更容易,如果由于函数外部对接收器的更改而出现问题,则更容易找出原因。正如前面提到的,循环(和函数)一点击返回就退出。您应该将return语句置于IF条件下
例如(假设colliderect()返回1或0…或True或False),如果发生任何冲突,则应返回1:
def spriteCollide(neurotransmitter1):
print len(receptors)
for i in range(len(receptors)):
if receptors[i].receptorObjectInstance.colliderect(neurotransmitter1.neurotransmitterObjectInstance):
return 1
return 0
如前所述,循环(和函数)一到达return就退出。您应该将return语句置于IF条件下 例如(假设colliderect()返回1或0…或True或False),如果发生任何冲突,则应返回1:
def spriteCollide(neurotransmitter1):
print len(receptors)
for i in range(len(receptors)):
if receptors[i].receptorObjectInstance.colliderect(neurotransmitter1.neurotransmitterObjectInstance):
return 1
return 0
我们可以做得更好
def spriteCollide(receptors,neurotransmitter):
return any( [True if
receptorObjectInstance.colliderect(neurotransmitter.neurotransmitterObjectInstance)
else False for receptor in receptors] )
这将根据每个受体是否与你传递的神经递质发生碰撞,建立一个
True
s和False
s的列表。如果其中任何一个发生碰撞,它将返回True
,如果没有碰撞,它将返回False
。我们可以改进这一点
def spriteCollide(receptors,neurotransmitter):
return any( [True if
receptorObjectInstance.colliderect(neurotransmitter.neurotransmitterObjectInstance)
else False for receptor in receptors] )
这将根据每个受体是否与你传递的神经递质发生碰撞,建立一个
True
s和False
s的列表。如果其中任何一个发生冲突,它将返回True
,如果没有冲突,它将返回False
。谢谢,有没有其他方法可以“返回”函数外的值?再次查看答案。谢谢,有没有其他方法可以“返回”函数外的值?再次查看答案。您应该为范围内的i(len(受体))更改。受体[i]
。。。简单地表示受体中的受体
…表示受体
…表示范围内的i(len(受体)):
在Python中是不允许的。对受体中的受体使用:
代替。你应该为范围内的i(len(受体))更改。受体[i]
。。。简单地表示受体中的受体
…表示受体
…表示范围内的i(len(受体)):
在Python中是不允许的。对receptor中的receptor使用:
。我得到了一个语法错误!真的不知道在哪里!可能在缩进里。我可能把这些行分割错了,iirc不管它是Python2还是Python3,都可以在没有的情况下分割行代码>定义spriteCollide(受体,神经递质):`应该都在一行上,其余的都应该在下一行缩进一次。@AshleyCollinge噢,不是,因为我忘了条件在列表comp中的位置。让我编辑…我得到一个语法错误!真的不知道在哪里!可能在缩进里。我可能把这些行分割错了,iirc不管它是Python2还是Python3,都可以在没有的情况下分割行代码>定义spriteCollide(受体,神经递质):`应该都在一行上,其余的都应该在下一行缩进一次。@AshleyCollinge噢,不是,因为我忘了条件在列表comp中的位置。让我来编辑。。。。