You need to enable JavaScript to run this app. 如何修改代码以正确求解含多层NOT的逻辑表达式
优惠活动
大模型
产品
解决方案
定价
更多

如何修改代码以正确求解含多层NOT的逻辑表达式

多层NOT运算求解函数修复方案

现有代码bug根因

  • 原代码通过variable.index('NOT')默认匹配最左侧的NOT进行处理,遇到连续嵌套NOT的场景时,会错误将后一个NOT当作布尔值处理
  • 原代码else分支未校验NOT后的元素是否为合法布尔值,直接将非TRUE的元素赋值为TRUE,违背逻辑运算规则
  • 以输入["NOT", "NOT", "TRUE"]为例,原代码会匹配索引0的NOT,将索引1的"NOT"误转为"TRUE",再删除索引0的NOT,最终输出错误的["TRUE", "TRUE"]

调整思路

  • NOT是右结合一元运算符,需优先处理最靠近原子布尔值的最右侧NOT(即最内层NOT)
  • 处理时严格校验NOT后跟随的元素只能是TRUE或FALSE
  • 增加循环逻辑,直到列表中无NOT残留再返回结果

修复后代码

def implement_not(variable):
    # 复制原列表避免修改传入的原始变量
    var = variable.copy()
    # 循环处理所有NOT,直到无残留
    while 'NOT' in var:
        # 计算最右侧NOT的索引(即最内层NOT)
        pos_not = len(var) - 1 - var[::-1].index('NOT')
        # 校验NOT的合法性:后必须跟随布尔值
        if pos_not + 1 >= len(var) or var[pos_not + 1] not in {'TRUE', 'FALSE'}:
            raise ValueError("非法逻辑表达式:NOT后需跟随合法布尔值")
        # 翻转布尔值
        var[pos_not + 1] = 'FALSE' if var[pos_not + 1] == 'TRUE' else 'TRUE'
        # 删除已处理的NOT
        del var[pos_not]
    return var

验证效果

  • 输入["NOT", "TRUE"],输出["FALSE"],符合预期
  • 输入["NOT", "NOT", "TRUE"],输出["TRUE"],符合逻辑规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 07:15:04