计算器python代码50行
时间: 2023-07-22 19:27:43 浏览: 105
以下是一个具有基本四则运算功能的 Python 计算器程序,共计 50 行代码:
```python
import re
# 定义计算函数
def calculate(num1, num2, operator):
if operator == '+':
return num1 + num2
elif operator == '-':
return num1 - num2
elif operator == '*':
return num1 * num2
elif operator == '/':
return num1 / num2
else:
return None
# 定义主函数
def main():
# 输出欢迎信息
print("欢迎使用 Python 计算器!")
# 循环读取用户输入
while True:
# 读取用户输入的算式
expression = input("请输入算式(支持加减乘除和括号):")
# 去除空格
expression = expression.replace(' ', '')
# 判断是否退出
if expression.lower() == 'exit':
print("感谢使用 Python 计算器,再见!")
break
# 判断算式是否合法
if not re.match(r'^[\d+\-*/().]+$', expression):
print("算式不合法,请重新输入!")
continue
# 将算式中的数字和运算符分离出来
tokens = re.findall(r'\d+\.?\d*|\+|\-|\*|\/|\(|\)', expression)
# 转换为逆波兰表达式
output_queue = [] # 输出队列
operator_stack = [] # 运算符栈
priority = {'(': 0, '+': 1, '-': 1, '*': 2, '/': 2} # 运算符优先级
for token in tokens:
if token.isdigit(): # 数字直接输出
output_queue.append(float(token))
elif token == '(': # 左括号入栈
operator_stack.append(token)
elif token == ')': # 右括号弹出栈内运算符直到左括号
while operator_stack[-1] != '(':
output_queue.append(operator_stack.pop())
operator_stack.pop() # 左括号出栈
else: # 运算符
while operator_stack and priority[operator_stack[-1]] >= priority[token]:
output_queue.append(operator_stack.pop())
operator_stack.append(token)
while operator_stack: # 弹出栈内剩余运算符
output_queue.append(operator_stack.pop())
# 计算逆波兰表达式的值
result_stack = []
for token in output_queue:
if isinstance(token, float): # 数字入栈
result_stack.append(token)
else: # 运算符出栈计算
num2 = result_stack.pop()
num1 = result_stack.pop()
result_stack.append(calculate(num1, num2, token))
# 输出计算结果
print("计算结果为:", result_stack[0])
if __name__ == '__main__':
main()
```
该程序使用了正则表达式和栈的数据结构来实现逆波兰表达式的计算。用户输入的算式会先被转换为逆波兰表达式,然后再计算结果。该程序支持加减乘除和括号,可以进行较为复杂的计算。
阅读全文