Skip to content

【练习】计算器

项目简介

计算器

知识模块

  • Python 编程语言

知识点

  • 异常处理
  • 分支语句-if
  • 函数返回值与参数处理

受众

  • 初级测试开发工程师
  • 初级Python开发工程师

作业要求

编写一个Python程序,可以执行加法、减法、乘法和除法操作。用户可以输入两个数字和运算符,然后计算并输出结果。实现计算器的功能(+、-、*、/),并处理异常情况,比如:输入的不是数字、除数为0等。

解题思路

  1. 定义一个函数,接收两个数字和一个操作符,并返回计算结果。

  2. 使用异常处理来捕获并处理可能发生的异常情况并输出错误消息。

完整代码

def calculate(num1, num2, operator):
    if operator == '+':
        return num1 + num2
    elif operator == '-':
        return num1 - num2
    elif operator == '*':
        return num1 * num2
    elif operator == '/':
        return num1 / num2
    else:
        return None

# 主程序
while True:
    try:
        # 获取用户输入的数值和运算符
        num1 = float(input("请输入第一个数:"))
        operator = input("请输入运算符号(+、-、*、/):")
        num2 = float(input("请输入第二个数:"))

        # 调用calculate函数执行运算,并输出结果
        result = calculate(num1, num2, operator)
        if result is not None:
            print("计算结果为:", result)
        else:
            print("输入的运算符号不正确,请重新输入!")

        # 询问用户是否继续运算
        flag = input("是否继续运算?(Y/N)")
        if flag == 'N' or flag == 'n':
            break
    except ZeroDivisionError:
        print("错误:除数不能为零")
    except ValueError:
        print("错误:请输入有效的数字")
    except Exception as e:
        print("发生异常:",e)
    finally:
        print("程序结束。")

代码讲解

  1. 代码

    def calculate(num1, num2, operator):
        if operator == '+':
            return num1 + num2
        elif operator == '-':
            return num1 - num2
        elif operator == '*':
            return num1 * num2
        elif operator == '/':
            return num1 / num2
        else:
            return None
    

    • 定义了一个名为 calculate 的函数,该函数接受两个数字和一个操作符作为参数。
    • 根据操作符执行相应的运算,然后返回结果。如果操作符不是支持的运算符,返回 None
  2. while True:定义了一个无限循环,意味着程序会一直执行循环内的代码,直到遇到 break 语句。

  3. try:用于捕获可能发生的异常。

  4. result = calculate(num1, num2, operator):调用calculate()函数,并传递参数,将返回的结果赋值给 result

  5. except ZeroDivisionError:用于捕获ZeroDivisionError异常,即除数为零的情况。

  6. except ValueError:用于捕获 ValueError 异常,即用户输入无效的数字。

  7. except Exception as e:用于捕获其他类型的异常。异常的详细信息会被存储在变量 e 中。

  8. finally:不论是否发生异常,都会执行 finally 块中的代码。