# 可在线输入并计算结果的小型计算器


问题背景

随着用户需求的多样化,编程项目需要具备功能丰富的计算器。本项目支持基本数学运算(加减乘除)和分数计算,输出结果并附带单位说明。输入验证机制自动过滤无效输入,输出样式使用字符串格式化,无需依赖第三方库。

技术思路与实现

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(千克)

项目特点与优势

  1. 独立性:项目可独立运行,无需依赖第三方库,确保代码可扩展性。
  2. 简洁性:采用面向对象设计,实现简单,代码清晰易读。
  3. 功能完备性:支持加减乘除运算和分数计算,满足基本数学需求。
  4. 输出规范:使用字符串格式化输出结果,避免隐藏运算符号。

总结

本项目通过封装核心功能实现功能齐全的计算器,验证了编程能力的实用性。输入验证机制确保输入的正确性,输出样式规范提升用户体验。项目具备良好的可扩展性,适用于不同规模的编程项目。


发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注