请用Python3编写一个计算器的控制台程序,支持加减乘除、乘方、括号、小数点,运算符优先级为括号>乘方>乘除>加减,同级别运算按照从左向右的顺序计算。
时间: 2024-03-18 09:39:08 浏览: 48
好的,我可以为您编写一个计算器的控制台程序。以下是代码:
```python
import math
# 定义函数用于计算乘方
def power(base, exponent):
return math.pow(base, exponent)
# 定义函数用于计算乘除法
def multiply_divide(expression):
# 先计算乘除法
while '*' in expression or '/' in expression:
for i in range(len(expression)):
if expression[i] == '*':
result = float(expression[i-1]) * float(expression[i+1])
expression[i-1:i+2] = [str(result)]
break
elif expression[i] == '/':
result = float(expression[i-1]) / float(expression[i+1])
expression[i-1:i+2] = [str(result)]
break
return expression
# 定义函数用于计算加减法
def add_subtract(expression):
# 再计算加减法
while '+' in expression or '-' in expression:
for i in range(len(expression)):
if expression[i] == '+':
result = float(expression[i-1]) + float(expression[i+1])
expression[i-1:i+2] = [str(result)]
break
elif expression[i] == '-':
result = float(expression[i-1]) - float(expression[i+1])
expression[i-1:i+2] = [str(result)]
break
return expression
# 定义函数用于计算整个表达式
def calculate(expression):
# 先找出所有的括号,逐层计算
while '(' in expression:
start_index = expression.index('(')
end_index = start_index + 1
count = 1
while count > 0:
if expression[end_index] == '(':
count += 1
elif expression[end_index] == ')':
count -= 1
end_index += 1
result = calculate(expression[start_index+1:end_index-1])
expression[start_index:end_index] = [str(result)]
# 计算乘方、乘除、加减
expression = multiply_divide(expression)
expression = add_subtract(expression)
# 最终结果为表达式中唯一的一个数
return float(expression[0])
# 循环读取用户输入
while True:
expression = input('请输入要计算的表达式(输入 q 退出):')
if expression == 'q':
break
# 将字符串转换为列表,方便处理
expression_list = expression.replace(' ', '').replace('(', '( ').replace(')', ' )').split()
# 处理负号
for i in range(len(expression_list)):
if expression_list[i] == '-' and (i == 0 or expression_list[i-1] in ['(', '+', '-', '*', '/', '**']):
expression_list[i+1] = '-' + expression_list[i+1]
expression_list[i] = ''
# 计算表达式
result = calculate(expression_list)
print('计算结果为:', result)
```
示例运行结果:
```
请输入要计算的表达式(输入 q 退出):2+3*(5-1)-7/2
计算结果为: 16.5
请输入要计算的表达式(输入 q 退出):3**2+4*(2-1/(1+1))+2
计算结果为: 13.0
请输入要计算的表达式(输入 q 退出):-2*3+4/-2
计算结果为: -7.0
请输入要计算的表达式(输入 q 退出):q
```
阅读全文