[英]For Loop Python not running for len
我編寫了一個for循環(請參見下文),以檢查一個對象實例是否與任何其他四個對象實例發生碰撞,如果發生了碰撞,該函數應返回一個,以開始另一組反應。 for循環打算運行四次-僅運行一次,因此它沒有檢測到與三個接收器的碰撞。
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, 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.
您還應該考慮將receptors
作為函數的參數。 將所有內容保持在正確的范圍內會更容易,如果由於功能以外的receptors
發生了更改而導致出現問題, receptors
容易找出原因。
如前所述,循環(和函數)一到達返回就退出。 您應該將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
和False
的列表。 如果其中任何一個發生沖突,則返回True
如果它們都不存在,則返回False
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.