簡體   English   中英

對於Loop Python未運行

[英]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] )

這會根據每種受體是否與您傳遞的神經遞質發生碰撞來建立TrueFalse的列表。 如果其中任何一個發生沖突,則返回True如果它們都不存在,則返回False

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM