小米计算器python源代码
时间: 2023-05-09 21:03:04 浏览: 124
小米计算器Python源代码同样可以实现基础的四则运算和括号运算。下面给出一个简单的小米计算器Python源码示例:
```
# -*- coding: utf-8 -*-
'''
小米计算器Python程序
'''
import re
def calculate(s):
# 去掉空格
s = s.replace(' ', '')
# 将连续的+,-符号替换为单个符号
s = re.sub('-+', '-', s)
s = re.sub('\++', '+', s)
# 将表达式中的数字和符号分开
pattern = re.compile(r'(\d+\.?\d*)|([+\-\*/\(\)])')
expr_list = pattern.findall(s)
# 将表达式转化为逆波兰表达式
stack = []
postfix_list = []
for i in expr_list:
if i[0]|i[1] == '':
continue
elif i[1] in ['+', '-']:
while stack and stack[-1] != '(':
postfix_list.append(stack.pop())
stack.append(i[1])
elif i[1] in ['*', '/']:
while stack and stack[-1] in ['*', '/']:
postfix_list.append(stack.pop())
stack.append(i[1])
elif i[1] == '(':
stack.append(i[1])
elif i[1] == ')':
while stack and stack[-1] != '(':
postfix_list.append(stack.pop())
stack.pop()
else:
postfix_list.append(i[0])
while stack:
postfix_list.append(stack.pop())
# 计算逆波兰表达式
stack = []
for i in postfix_list:
if i[0] == '':
continue
elif i[0] not in ['+', '-', '*', '/']:
stack.append(float(i[0]))
else:
if i[0] == '+':
a = stack.pop()
b = stack.pop()
stack.append(a+b)
elif i[0] == '-':
a = stack.pop()
b = stack.pop()
stack.append(b-a)
elif i[0] == '*':
a = stack.pop()
b = stack.pop()
stack.append(a*b)
else:
a = stack.pop()
b = stack.pop()
stack.append(b/a)
return stack.pop()
if __name__ == '__main__':
# 测试程序
print(calculate('1+2*(3+4)-5/2'))
```
以上Python源代码实现了小米计算器的功能,通过输入表达式进行四则运算并返回结果。它支持加减乘除、带括号的表达式,可以正确处理优先级和左右结合性。如果需要实现更多高级算法,可以根据现有代码进行修改和扩展。
相关推荐
![py](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pptx](https://img-home.csdnimg.cn/images/20210720083543.png)