Skip to main content
 首页 » 编程设计

python之IF ... Elif ... Else 流程

2025年05月04日8cyq1162

我创建了一个带有 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”。

  • 如果上述情况均不成立,则供应值是作为随机分布生成的。不过,当我获得输出时,电源值确实超过了“capac”值 150。

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

请您参考如下方法:

不要像您在问题中所做的那样,将 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 初始化时才有效。