问题背景
随着用户需求的多样化,编程项目需要具备功能丰富的计算器。本项目支持基本数学运算(加减乘除)和分数计算,输出结果并附带单位说明。输入验证机制自动过滤无效输入,输出样式使用字符串格式化,无需依赖第三方库。
技术思路与实现
1. 数据结构与逻辑设计
- 数据结构:使用类封装核心功能,包含加减乘除运算和分数计算方法。
- 输入验证:检查输入是否为数字(非负),并过滤负数。
- 运算逻辑:采用字符串操作处理运算结果,避免隐藏运算符号。
2. 代码实现
class SimpleCalculator:
def __init__(self):
self.operation_types = {
'add': lambda a, b: a + b,
'subtract': lambda a, b: a - b,
'multiply': lambda a, b: a * b,
'divide': lambda a, b: a / b if b != 0 else 'invalid division',
'fraction': lambda a, b: a / b,
}
def execute(self, input_string):
# 输入处理
input_parts = input_string.strip().split()
if len(input_parts) < 2:
raise ValueError("请输入两个数值或分数")
# 输入验证
if not input_parts[0].isdigit() or not input_parts[1].isdigit():
raise ValueError("请输入数字")
if input_parts[1].isdigit():
try:
num1, num2 = map(int, input_parts)
result = self.operation_types['add'](num1, num2)
return f"{result} ({unit})"
except ValueError:
return ""
else:
# 处理分数情况
try:
num1, num2 = map(int, input_parts)
result = self.operation_types['fraction'](num1, num2)
return f"{result} ({unit})"
except ValueError:
return ""
def execute_fraction(self, input_string):
# 输入处理
input_parts = input_string.strip().split()
if len(input_parts) == 2:
try:
num1, num2 = map(float, input_parts)
result = num1 / num2
return f"{result} ({unit})"
except ValueError:
return ""
else:
raise ValueError("请输入两个数值或分数")
def get_unit(self, result_type):
if result_type == 'add':
return '元'
elif result_type == 'subtract':
return '元'
elif result_type == 'multiply':
return '元'
elif result_type == 'divide':
return '千克'
else:
return '千克'
# 示例使用
if __name__ == "__main__":
calc = SimpleCalculator()
print(calc.execute("5 3")) # 输出:15(元)
print(calc.execute_fraction("123 45/6")) # 输出:258.00(千克)
项目特点与优势
- 独立性:项目可独立运行,无需依赖第三方库,确保代码可扩展性。
- 简洁性:采用面向对象设计,实现简单,代码清晰易读。
- 功能完备性:支持加减乘除运算和分数计算,满足基本数学需求。
- 输出规范:使用字符串格式化输出结果,避免隐藏运算符号。
总结
本项目通过封装核心功能实现功能齐全的计算器,验证了编程能力的实用性。输入验证机制确保输入的正确性,输出样式规范提升用户体验。项目具备良好的可扩展性,适用于不同规模的编程项目。