2016-01-26 137 views
0

我建模的粒子通過不同的層移動,一旦移動通過層我希望它打印了一些東西。我的問題是粒子可以移回前一層並再次出來,這會觸發它再次打印,我不希望這樣。打印一次在嵌套循環

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!' 

我不想重複的部分是最後三個報表打印,我已經試過了break語句,但是這個代碼是一個嵌套循環,當它被重新環狀它在休息前開始。

回答

0

無論類pho是什麼,請創建一個名爲printed的屬性或將其初始化爲False。然後,在第一次打印時,將其設置爲True,並說

if d > 10 and not pho.printed 

,而不是僅僅if d > 10

0

嘗試這樣的事情。你的代碼我認爲都應該是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