2

我创建了一个带有 if 流控制的函数,我想知道一些关于它的事情。

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,则该对象生成零供应,或者如果生成的供应值大于预定义的“capac”数量,则供应值 =“capac”。

  • 如果以上均不成立,则供应值生成为随机分布。但是,当我得到输出时,供应值确实超过了 150 的“容量”值。

我是否误解了如何进行流程?

4

2 回答 2

1

不要像您在问题中所做if elif的那样将结构与某种混淆。or仅当 条件为elif时才会评估if条件False。我想,你真正想要的是:

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 初始化时才有效。

于 2012-07-30T08:40:59.200 回答
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]

为了到达这里,我使用了上面来自 MaxPower 的流量建议,也 min(supply,capac),并声明了一个global supply. 最后一个问题似乎supply = 0.0永远不会出现,但它真的应该吗?

于 2012-07-30T09:59:00.133 回答