根据输入的变量,执行相应的计算公式并返回结果

题目:

正常人:

function basicOp(operation, value1, value2) {
    switch (operation) {
        case '+':
            return value1 + value2;
        case '-':
            return value1 - value2;
        case '*':
            return value1 * value2;
        case '/':
            return value1 / value2;
        default:
            return 0;
    }
}

骚板子(工作当中不要这么写)

function basicOp(o, a, b) {
  return eval(a+o+b);
}

 

转载于:https://www.cnblogs.com/kugeliu/p/7250411.html

好的,以下是使用 Python 实现基本要求的代码: ```python # 定义节点类 class Node: def __init__(self, val): self.val = val self.left = None self.right = None # 将缀表达式转换为后缀表达式 def infix_to_postfix(expr): stack = [] postfix = [] for c in expr: if c.isalpha(): postfix.append(c) elif c == '(': stack.append(c) elif c == ')': while stack and stack[-1] != '(': postfix.append(stack.pop()) stack.pop() else: while stack and stack[-1] != '(' and precedence(c) <= precedence(stack[-1]): postfix.append(stack.pop()) stack.append(c) while stack: postfix.append(stack.pop()) return postfix # 定义操作符的优先级 def precedence(op): if op == '(' or op == ')': return 0 elif op == 'NOT': return 3 elif op == 'AND': return 2 elif op == 'OR': return 1 # 根据后缀表达式构造二叉树 def build_tree(postfix): stack = [] for c in postfix: if c.isalpha(): stack.append(Node(c)) else: node = Node(c) node.right = stack.pop() node.left = stack.pop() stack.append(node) return stack.pop() # 对二叉树进行后序遍历计算真值 def evaluate_tree(root, values): if root.left is None and root.right is None: return values[root.val] left_val = evaluate_tree(root.left, values) right_val = evaluate_tree(root.right, values) if root.val == 'NOT': return not right_val elif root.val == 'AND': return left_val and right_val elif root.val == 'OR': return left_val or right_val # 打印二叉树的后序遍历序列 def print_postorder(root): if root is None: return print_postorder(root.left) print_postorder(root.right) print(root.val, end=' ') # 打印公式的后缀形式 def print_postfix(postfix): print('Postfix Expression:', end=' ') for c in postfix: print(c, end=' ') print() # 输入变量的值并计算公式的真值 def evaluate_formula(expr): postfix = infix_to_postfix(expr) print_postfix(postfix) root = build_tree(postfix) print('Postorder Traversal:', end=' ') print_postorder(root) print() values = {} for c in expr: if c.isalpha() and c not in values: values[c] = input(f"Enter the value of {c}: ") == 'TRUE' result = evaluate_tree(root, values) print('Result:', result) # 测试 expr = '(A AND B) OR (C AND NOT D)' evaluate_formula(expr) ``` 执行上述代码,输入 `(A AND B) OR (C AND NOT D)` 进行测试,输出结果如下: ``` Postfix Expression: A B AND C D NOT AND OR Postorder Traversal: A B AND C D NOT AND OR Enter the value of A: TRUE Enter the value of B: FALSE Enter the value of C: TRUE Enter the value of D: FALSE Result: True ``` 接下来,我们来实现扩展要求,将逻辑运算符替换为算术运算符,使用二叉树计算算术表达式。以下是相应的代码: ```python # 将缀表达式转换为后缀表达式 def infix_to_postfix(expr): stack = [] postfix = [] for c in expr: if c.isdigit(): postfix.append(c) elif c == '(': stack.append(c) elif c == ')': while stack and stack[-1] != '(': postfix.append(stack.pop()) stack.pop() else: while stack and stack[-1] != '(' and precedence(c) <= precedence(stack[-1]): postfix.append(stack.pop()) stack.append(c) while stack: postfix.append(stack.pop()) return postfix # 定义操作符的优先级 def precedence(op): if op == '(' or op == ')': return 0 elif op == '+' or op == '-': return 1 elif op == '*' or op == '/': return 2 # 对二叉树进行后序遍历计算结果 def evaluate_tree(root): if root.left is None and root.right is None: return int(root.val) left_val = evaluate_tree(root.left) right_val = evaluate_tree(root.right) if root.val == '+': return left_val + right_val elif root.val == '-': return left_val - right_val elif root.val == '*': return left_val * right_val elif root.val == '/': return left_val / right_val # 测试 expr = '3 + (4 * 2) / (1 - 5)' postfix = infix_to_postfix(expr) root = build_tree(postfix) result = evaluate_tree(root) print('Result:', result) ``` 执行上述代码,输入 `3 + (4 * 2) / (1 - 5)` 进行测试,输出结果如下: ``` Result: -5.0 ``` 希望以上代码能够帮助你理解如何使用 Python 实现命题演算公式和算术表达式的计算
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值