如何修正Python代码中if语句的多重判断条件?
修正后的代码及逻辑说明
首先先修正原代码里的两处基础错误:
filter的lambda表达式中,判断相等要用==而非=,原代码里的x.status = 'new'是赋值操作,会触发语法错误,应改为x.status == 'new'new_line是filter返回的可迭代对象,判断是否存在符合条件的元素,直接在布尔上下文里使用new_line即可(空可迭代对象会被视为False)
接下来是核心的if条件修改,根据你给出的业务规则,我们可以把条件拆解为一个必要前提+二选一的触发条件:
- 必要前提:
sale_order_line.type != 'service'(只要是service类型就绝不打印) - 触发条件满足任意一个即可:
- 订单行状态不是closed:
sale_order_line.status != 'closed' - 订单行状态是closed,但当前订单存在new状态的行:
sale_order_line.status == 'closed' and new_line
- 订单行状态不是closed:
把这些逻辑合并成简洁的布尔表达式,最终的if条件为:
if sale_order_line.type != 'service' and (sale_order_line.status != 'closed' or new_line): print('need to print')
完整修正后的代码片段:
for sale_order in sale_orders: # 修正lambda里的判断运算符,后续直接用new_line判断是否存在符合条件的行 new_line = sale_order.filter(lambda x: x.status == 'new') for sale_order_line in sale_order.sale_order_lines: # 修正后的判断条件 if sale_order_line.type != 'service' and (sale_order_line.status != 'closed' or new_line): print('need to print')
逻辑验证
对应你给出的业务场景逐一验证:
- 场景1:status≠closed且type≠service → 满足
status≠closed,触发打印 - 场景2:status=closed、存在new_line且type≠service → 满足
new_line为真,触发打印 - 场景3:type=service → 不满足必要前提,不打印
- 场景4:status=closed且无new_line → 触发条件都不满足,不打印
完全符合你提出的核心规则。
内容的提问来源于stack exchange,提问作者Chaban33
相关产品推荐
相关产品推荐

