You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

螺栓质量判定函数if语句返回值异常求助

螺栓判定函数逻辑问题排查

问题背景

编写了用于判定螺栓状态的Python函数q7_assess_bolt,判定规则如下:

  • 合格(Pass):抗拉强度≥400MPa 且 直径偏差≤75微米
  • 售予Amart(Sell to Amart):未达合格标准,但直径偏差<125微米 且 附近有Amart Furniture
  • 拒收(Reject):未达合格标准,且不符合售予Amart的条件

测试q7_assess_bolt(300, 60, False)时,返回结果为'Sell to Amart',而非预期的'Reject',需排查if语句逻辑问题。

原函数代码

def q7_assess_bolt(strength, diameter_error, amart_near):
    '''Returns one of three string messages depending on whether a
    bolt is of acceptable quality or not.
    Parameters:
    strength - the bolt's tensile strength in MPa
    diameter_error - the bolt's diameter variation in micrometres
    amart_near - True iff there is an Amart Furniture near the factory
    '''
    if strength >= 400:
        diameter_error <= 75
        return PASS
    else:
        if strength < 400:
            diameter_error < 125
            amart_near is True
            return AMART
        else:
            if amart_near is False:
                diameter_error <125
                strength < 400
                return REJECT

问题分析

  1. 条件判断语法错误:原代码中,if分支内单独写diameter_error <=75这类表达式,没有将其作为判断条件的一部分(需用and连接到if语句中)。这导致只要满足strength >=400就直接返回PASS,完全忽略直径偏差的要求;同理,进入else分支后,只要strength <400就直接返回AMART,不管amart_near是否为True——这就是测试用例返回错误结果的核心原因。
  2. 未定义字符串常量:代码中使用的PASS、AMART、REJECT未定义为对应字符串,运行时会抛出NameError。
  3. 逻辑冗余:进入else分支时,已经确定strength <400,无需再次判断该条件;后续的嵌套if结构也完全可以简化。

修正后的函数代码

def q7_assess_bolt(strength, diameter_error, amart_near):
    '''Returns one of three string messages depending on whether a
    bolt is of acceptable quality or not.
    Parameters:
    strength - the bolt's tensile strength in MPa
    diameter_error - the bolt's diameter variation in micrometres
    amart_near - True iff there is an Amart Furniture near the factory
    '''
    # 判定合格条件
    if strength >= 400 and diameter_error <= 75:
        return 'Pass'
    # 判定售予Amart条件:未合格,且直径偏差<125且附近有Amart
    elif diameter_error < 125 and amart_near:
        return 'Sell to Amart'
    # 其余情况拒收
    else:
        return 'Reject'

验证测试

调用q7_assess_bolt(300, 60, False)时,因未满足合格条件,且amart_near为False,会进入else分支返回'Reject',符合预期。

内容的提问来源于stack exchange,提问作者user19739695

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 07:15:31