螺栓质量判定函数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
问题分析
- 条件判断语法错误:原代码中,if分支内单独写
diameter_error <=75这类表达式,没有将其作为判断条件的一部分(需用and连接到if语句中)。这导致只要满足strength >=400就直接返回PASS,完全忽略直径偏差的要求;同理,进入else分支后,只要strength <400就直接返回AMART,不管amart_near是否为True——这就是测试用例返回错误结果的核心原因。 - 未定义字符串常量:代码中使用的
PASS、AMART、REJECT未定义为对应字符串,运行时会抛出NameError。 - 逻辑冗余:进入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
相关产品推荐
相关产品推荐

