python 代码实现四则运算 (前缀表达式)
计算表达式如下:
(+ 1 2 )
(+ 1 (+ 2 3))
(* (+ 1 2) (*3 4))
第一个函数cal_1 是使用递归的形式;
第二个函数cal_2 是使用非递归的形式--堆栈, 且第二个支持多个参数(2个或以上)
#calculator expression
def cal_1 (s):
s = s.strip().replace('(','',1)[::-1].replace(')','',1)[::-1].strip()
if ' ' not in s :
return float(s) #just a number
else:
tmp = s.split(' ',1)
opt = tmp[0].strip()
temp = tmp[1].strip()
left = 0
right = 0
for i in range(len(temp)):
if temp[i] == '(':
left += 1
if temp[i] == ')':
right += 1
if temp[i] == ' ' and left==right :
break
data1 = temp[:i]
data2 = temp[i:]
v1 = cal_1(data1)
v2 = cal_1(data2)
if opt == '+':
return v1 + v2
elif opt == '-':
return v1 - v2
elif opt == '*':
return v1 * v2
elif opt == '/':
return v1 / v2
elif opt == '%':
return v1 % v2
else:
return 0
def cal_2 (s):
def cal_exp (exp):
def cal_exp_two (opt,a,b):
a = float(a)
b = float(b)
if opt == '+':
return a+b
elif opt == '-':
return a-b
elif opt == '*':
return a*b
elif opt == '/':
return a/b
elif opt == '%':
return a%b
else:
return 0
result = exp[1]
for i in range(2,len(exp)):
result = cal_exp_two (exp[0],result,exp[i])
return result
s = s.replace('(',' ( ').replace(')',' ) ')
left = s.split()
right = []
temp = []
while left:
tmp_left = left.pop().strip()
if tmp_left == '(':
tmp_right = right.pop()
while tmp_right != ')':
temp.append (tmp_right)
tmp_right = right.pop()
right.append (cal_exp(temp))
temp = []
else:
right.append (tmp_left)
return right[-1]
print cal_1 ( '(- (+ 23 1) (* 3 4))') #12.0
print cal_1 ( '(- (+ 1 2) (* 3 4))') #-9
print cal_1 ( '(- 1 1)') #0
print cal_1 ( '(- 1 (* 12 12))' ) #-143.0
print cal_1 ( '(- (* 23 2) 12))' ) #34.0
print '----------------------'
#
print cal_2 ( '(- (+ 23 1) (* 3 4))') #12.0
print cal_2 ( '(- (+ 1 2) (* 3 4))') #-9
print cal_2 ( '(- 1 1)') #0
print cal_2 ( '(- 1 (* 12 12))' ) #-143.0
print cal_2 ( '(- (* 23 2) 12))' ) #34.0
print cal_2 ( '(- (* 23 2 2) 12 ))' ) #80.0
分享到:
相关推荐
本教程的目标是让读者快速理解正则表达式的概念,学会基本的语法结构,并能应用到实际的Python代码中,进行字符串匹配和处理。 二、如何使用本教程 建议读者跟随教程的步骤,逐步实践每个例子,加深理解和记忆。...
例如,前缀表达式(也称波兰表示法)和后缀表达式(逆波兰表示法)都是常见的表达式表示方式,它们可以避免括号的使用,通过栈来计算表达式值。对于编译器或解释器设计,词法分析、语法分析和语义分析是表达式实现的...
- **前缀表达式(波兰表示法)**:运算符位于操作数之前,如 `+ a b` 表示 `a + b`。 - **后缀表达式(逆波兰表示法)**:运算符位于操作数之后,如 `a b +` 表示 `a + b`。 - **中缀表达式**:我们最常见的形式...
5. **前缀表达式**:前缀表达式中,运算符位于操作数之前,如 `* + 2 3 4`。虽然不如后缀表达式常见,但也可以有效地进行表达式计算。 6. **算法设计**:在实现表达式求值器时,需要设计合适的算法。例如,可以使用...
一种常见的方法是使用递归下降解析,这是一种自顶向下、非回溯的解析策略。 在实现过程中,可能会遇到一些挑战,比如处理优先级和括号。优先级决定了运算符的执行顺序,而括号可以改变表达式的结构。例如,"(2 + 3)...
7. **代码实现**:使用某种编程语言(如C++、Python、Java等)实现表达式求值算法。代码应该清晰、可读性强,遵循良好的编程规范,以便于他人理解和维护。 8. **测试与调试**:为了确保算法的正确性,需要设计各种...
前缀表达式的一大优点是不需要括号就能清晰地表示运算的优先级。 **后缀表达式**,又称逆波兰表示法,运算符位于操作数之后。同样的中缀表达式会转换为"2 3 4 * +"。后缀表达式适合用栈来解析,因为操作数先入栈,...
6. **算法实现**:在编程中,我们可以使用递归下降解析器或使用栈实现的算法来完成这个任务。在Python等语言中,可以创建一个栈来存储操作符,一个队列来存储操作数,并使用循环和条件判断来实现转换和求值。 7. **...
中缀前缀和后缀表达式3.10.什么是队列3.11.队列抽象数据类型3.12.Python实现队列3.13.模拟:烫手山芋3.14.模拟:打印机3.15.什么是Deque3.16.Deque抽象数据类型3.17.Python实现Deque3.18.回文检查3.19.列表3.20.无序...
此外,前缀表达式(前缀记法)也是一种常见的表示方式,运算符位于操作数之前,但通常不如后缀表达式在求值时方便。 除了使用后缀表达式和栈,还可以通过其他数据结构和算法实现表达式求值,例如二叉表达式树...
- **二叉树转前缀表达式**:从根节点开始,递归地对每个节点执行以下操作:先打印操作符,然后打印左子树,最后打印右子树。 - **二叉树转中缀表达式**:同样从根节点开始,先打印左子树,然后打印当前节点的操作符...
`str()`和`repr()`函数也是Python 2和Python 3之间的区别,`str()`用于创建用户友好的字符串表示,而`repr()`则生成一个合法的Python表达式表示值。在Python 3中,`print`函数不再接受未括号的参数,因此在调用`repr...
无论是添加还是删除文件名前缀,都能够轻松实现。掌握了这些基本技巧后,你可以进一步扩展应用范围,例如结合正则表达式进行更复杂的文件名替换等高级操作。希望本篇文章能为你在实际工作中的文件管理带来便利。
`amd64`前缀表明这是针对64位(x64)架构的安装程序,而没有前缀的文件则是针对32位(x86)系统的。因此,无论你的Windows是32位还是64位,都有对应的安装包可供选择。 Python 3.4.0的关键特性包括: 1. **asyncio...
- 函数调用自身实现递归操作。 #### 五、模块 1. **模块定义**: - 模块是包含函数和变量的 Python 文件。 - 可以导入其他模块到当前程序中。 2. **导入模块**: - 使用 `import` 语句导入模块: ```python ...
包含LL分析法和LR1分析方法,python编写,包含python源代码、实验报告、输入输出文件。 实验报告包含具体实验步骤、LR1预测分析表和LL预测分析程序、代码的数据结构和设计思想。 题目:语法分析程序的设计与实现...
本话题聚焦于“计算数_将简单的加减乘除括号公式解析成树的结构”,这实际上是指将含有加、减、乘、除运算以及括号的数学表达式转换为计算树(也称为操作树或语法树),以便更直观地理解表达式的运算顺序并进行计算...
### 经典Python面试题知识点解析 #### 1. 为什么学习Python? - **易学性**: Python 的语法简洁明了,易于上手,适合初学者快速入门编程。 - **广泛应用**: 在数据科学、Web 开发、自动化脚本、网络爬虫等领域有着...
7. Unicode编码:在Python 2.7中,用`u`前缀定义Unicode字符串。选项C正确,`a = u'中文'`定义了一个Unicode字符串。 8. 字符串比较:在Python中,字符串比较是逐字符进行的。`'a' 的比较结果是True,因为它判断了`...
- **后缀表达式求值**:对于后缀表达式,可以使用一个栈,从左到右扫描表达式,遇到数字就压栈,遇到运算符则弹出栈顶的两个元素进行运算,结果再压回栈,直到扫描完所有字符,最后栈顶的元素就是表达式的结果。...