簡體   English   中英

嵌套循環中僅打印一次

[英]Print only once in nested loop

我正在對一個穿過不同層的粒子建模,一旦它穿過層,我希望它打印一些東西。 我的問題是粒子可以移回上一層並再次出現,從而觸發它再次打印,我不希望這樣。

while math.sqrt((pho.pos.x)*(pho.pos.x)+(pho.pos.y)*(pho.pos.y)+(pho.pos.z)*(pho.pos.z))<10:
    x=random.uniform(-j,j)
    y=random.uniform(-j,j)
    z=random.uniform(-j,j)
    step=(x,y,z)
    t=t+dt
    pho.pos=pho.pos+step
    print 'Step Number', t
    rate(speed)
    d=math.sqrt((pho.pos.x)*(pho.pos.x)+(pho.pos.y)*(pho.pos.y)+(pho.pos.z)*(pho.pos.z))
    '''if d>10:
        print pho.pos 
        print d 
        print 'Out of Layer 1 in',t,'steps!'
        break
    else:
        pass'''
d=math.sqrt((pho.pos.x)*(pho.pos.x)+(pho.pos.y)*(pho.pos.y)+(pho.pos.z)*(pho.pos.z))
print pho.pos
print d
print 'Out of Layer 1 in',t,'steps!'

我不想重復的部分是最后三個print語句,我嘗試了break語句,但是此代碼是嵌套循環,當它重新循環時,它將在中斷之前重新開始。

在任何pho類上,都創建一個名為printed或something的屬性,並將其初始化為False 然后,在第一次打印時將其設置為True,然后說

if d > 10 and not pho.printed

而不是僅僅if d > 10

嘗試這樣的事情。 認為您的代碼都應該是while循環的一部分。 如果不是,請將out_of_layer移至下一個外部循環之前。

out_of_layer = False  

while math.sqrt((pho.pos.x)*(pho.pos.x)+(pho.pos.y)*(pho.pos.y)+(pho.pos.z)*(pho.pos.z))<10:
    x=random.uniform(-j,j)

    ... blah blah stuff you already know about ...

    d=math.sqrt((pho.pos.x)*(pho.pos.x)+(pho.pos.y)*(pho.pos.y)+(pho.pos.z)*(pho.pos.z))
    if not out_of_layer:
        print pho.pos
        print d
        print 'Out of Layer 1 in',t,'steps!'
        out_of_layer = True

暫無
暫無

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

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