1. 为什么需要自己实现计算器?
在编程学习过程中,实现一个计算器几乎是每个Python初学者的必经之路。这不仅仅是因为计算器功能本身具有实用性,更重要的是它能帮助我们掌握以下几个核心编程概念:
- 基础语法:变量定义、运算符使用、条件判断
- 函数封装:将特定功能模块化
- 用户交互:处理控制台输入输出
- 异常处理:应对非法输入情况
我见过很多初学者直接跳过这个练习,认为它"太简单",结果在后续更复杂的项目中暴露出基础不牢的问题。实际上,一个健壮的计算器实现需要考虑的边界情况比想象中多得多。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础版本实现
2.1 四则运算核心逻辑
我们先从最基础的版本开始,这个版本只处理两个数的加减乘除:
python复制def basic_calculator():
print("简易计算器(输入q退出)")
while True:
try:
# 获取用户输入
expression = input("请输入算式(如 2 + 3):").strip()
if expression.lower() == 'q':
break
# 解析输入
num1, operator, num2 = expression.split()
num1 = float(num1)
num2 = float(num2)
# 执行计算
if operator == '+':
result = num1 + num2
elif operator == '-':
result = num1 - num2
elif operator == '*':
result = num1 * num2
elif operator == '/':
result = num1 / num2
else:
print("错误:不支持的操作符")
continue
print(f"结果:{result}")
except ValueError:
print("输入格式错误,请按 数字 运算符 数字 的格式输入")
except ZeroDivisionError:
print("错误:除数不能为零")
关键点说明:
- 使用while True循环保持程序持续运行
- try-except块捕获可能的异常
- 严格限制输入格式为"数字 运算符 数字"
- 提供退出机制(输入q退出)
2.2 基础版本的局限性
这个版本虽然简单,但存在几个明显问题:
- 只能处理两个数的运算
- 运算符优先级无法处理
- 输入格式要求过于严格
- 不支持括号等复杂表达式
这些问题我们会在进阶版本中逐步解决。
3. 进阶版本实现
3.1 支持多运算符运算
要支持多个运算符的连续运算,我们需要引入表达式解析和运算符优先级的概念:
python复制import operator
def advanced_calculator():
print("进阶计算器(支持多运算符)")
ops = {
'+': operator.add,
'-': operator.sub,
'*': operator.mul,
'/': operator.truediv
}
while True:
try:
expr = input("请输入表达式(如 2 + 3 * 4):").strip()
if expr.lower() == 'q':
break
# 分割表达式为数字和运算符
tokens = []
current_token = ''
for char in expr.replace(' ', ''):
if char in '+-*/':
if current_token:
tokens.append(float(current_token))
current_token = ''
tokens.append(char)
else:
current_token += char
if current_token:
tokens.append(float(current_token))
# 处理乘除法(优先级高)
i = 0
while i < len(tokens):
if isinstance(tokens[i], str) and tokens[i] in '*/':
left = tokens[i-1]
op = tokens[i]
right = tokens[i+1]
