input()函数接收到的数据均为字符串类型,现需设计一个简单的计算器,用户输入一个可能包含加、减、乘、除等运算的数学表达式,计算其结果并输出。
时间: 2024-09-20 14:10:32 浏览: 55
js代码-实现一个 normalize 函数,能将输入的特定的字符串转化为特定的结构化数据
设计一个简单的计算器,首先需要将用户输入的字符串分解成操作数和运算符两个部分,然后应用适当的算法来计算结果。Python 的`re`模块中的正则表达式可以帮助我们完成这个任务。以下是一个基本的实现示例:
```python
import re
def calculate(expression):
# 定义正则表达式模式,匹配数字和运算符
pattern = r"([-+]?\d+(\.\d+)?)\s*(\+\s*([-+]?\d+(\.\d+)?)|[-]\s*([-+]?\d+(\.\d+)?)|[\*\s\/]\s*([-+]?\d+(\.\d+)?)"
# 使用正则表达式找到所有的数字和运算符
matches = re.findall(pattern, expression)
if not matches:
return "无效的表达式"
# 将匹配项分割成操作数和运算符列表
numbers = [float(match[0]) for match in matches if match[0].isdigit()]
operators = [match[1] for match in matches if match[1] in "+-*/"]
result = numbers[0]
i = 1
while i < len(numbers):
if operators[i - 1] == '+':
result += numbers[i]
elif operators[i - 1] == '-':
result -= numbers[i]
elif operators[i - 1] == '*':
result *= numbers[i]
elif operators[i - 1] == '/':
if numbers[i] != 0:
result /= numbers[i]
else:
return "除数不能为零"
i += 1
return round(result, 2) # 返回结果,四舍五入到两位小数
# 获取用户输入
expression_input = input("请输入一个数学表达式(如:1 + 2 * 3):")
print(calculate(expression_input))
```
在这个示例中,我们通过正则表达式获取输入中的数字和运算符,并依次执行相应的运算。需要注意的是,这只是一个非常基础的实现,对于复杂的数学表达式或者更高级的功能,如支持括号和优先级等,可能需要使用更专业的解析库,如`ast`模块或第三方库`pyparsing`。
阅读全文