2012-07-30 54 views
2

我創建了一個函數,如果流量控制,我想知道關於它的一些事情。如果... Elif ...其他流程

class Supplier(Process): 

    def weeklySupply(self): 
     global D1Vals 
     xMeet = D1Vals[0] 
     lead = 0 
     capac = 150.0 
     supply = 0 
     if stocked.amount >= 15000: 
      supply = 0 
      yield put, self, stocked, supply 
      S1Vals.append(0) 
     elif supply >= capac: 
      supply = capac 
      yield put, self, stocked, supply 
      S1Vals.append(capac) 
     else: 
      supply = random.triangular(.70 * xMeet , xMeet , xMeet * 1.05) 
      yield put, self, stocked, supply 
      print ('Week:'+'%6.0f:Supplied: %6.0f units. CurSupply = %6.0f' % 
        (now() + 1., supply, stocked.amount)) 
      yield hold, self, lead 
      S1Vals.append(supply) 
      del D1Vals[0] 

我雖然我編碼爲:

  • 如果在放養對象的量爲> = 15000,則該對象生成零電源 或如果生成了供給值這是更大的而不是預定義的'容量',那麼供應值='容量'。

  • 如果以上情況均不成立,則供應價值是作爲隨機分佈生成的。當我得到我的輸出雖然,供應值確實超過了'容量'值150.

我誤解了如何做流?

+0

'stocked.amount'定義在哪裏? – 2012-07-30 08:08:06

+1

我想你的隨機三角形(.70 * xMeet,xMeet,xMeet * 1.05)'計算仍然可以高於'capac' .. – 2012-07-30 08:23:31

+1

另外,通常會產生4個值('put,self,stocked,supply' ),但在你的其他分支中,你也*產生3個值('hold,self,lead')。確保使用這個生成器的任何東西都會考慮到這一點,而不是爲第四個參數「補充」一個值,這恰好是「supply」。 – 2012-07-30 08:26:58

回答

1

不要混淆if elif構造與某種or,就像您在問題中所做的那樣。僅在if條件爲False時纔會評估elif條件。 我想,你真正想要的是:

if stocked.amount >= 15000: 
    if supply >= capac: 
     supply = capac 
     yield put, self, stocked, supply 
     S1Vals.append(capac) 
    else: 
     supply = 0 
     yield put, self, stocked, supply 
     S1Vals.append(0) 
else: 
    supply = random.triangular(.70 * xMeet , xMeet , xMeet * 1.05) 
    ... 

但這隻會工作,如果supply不是在函數的開頭以0初始化。

+0

我的'S1Vals。append(0)'停止在此結構中運行,它似乎不附加到列表 – manengstudent 2012-07-30 10:17:58

0

似乎工作的一種享受,以及一些很好的事情讓我思考。只有我能看到的問題是,現在我的S1Vals列表已停止將零供應添加到列表中。我可以在我的輸出圖上看到這一點,當我做一個len(S1Vals)。最後的代碼是您的建議是:

if stocked.amount >= 15000: 
     if supply >= capac: 
      supply = capac 
      S1Vals.append(capac) 
      yield put, self, stocked, supply 
     else: 
      supply = 0.0 
      yield put, self, stocked, supply 
      S1Vals.append(supply) 
    else: 
     supply = min(capac, random.triangular(.70 * xMeet , xMeet , xMeet * 1.05)) 
     yield put, self, stocked, supply 
     print ('Week:'+'%6.0f:Supplied: %6.0f units. CurSupply = %6.0f' % 
       (now() + 1., supply, stocked.amount)) 
     yield hold, self, lead 
     S1Vals.append(supply) 
     del D1Vals[0] 

到這裏我使用的流量以上建議從牛魔王,也min(supply,capac),並申報了global supply。最後一個問題似乎supply = 0.0從來沒有踢,但它應該真的?

+0

您必須考慮您的條件的關係。你的模型中哪個條件更強? – MaxPowers 2012-07-30 10:51:53

+0

@MaxPowers。我把它理解爲主要的'if..else'說'stocked.amount> = 15000',那麼裏面的'if ... else'需要決定,否則'outside''else:'當我讀到它時,我的要求是: 'supply = 0'當'stocked.amount'超過15000時 'supply''永遠不會大於'capac' 任何其他情況都適合外部'else:'語句。 – manengstudent 2012-07-30 18:31:43