计算器这一概念可以追溯到17世纪,最初以机械设备的形式诞生。随着时间的推移,这些计算器不断演进,变得更加普及。到了20世纪60年代,第一台电子计算器问世。如今,计算器已深度融入电脑乃至手机等现代设备中。
无论是物理形态还是数字形式,计算器都已成为现代生活中不可或缺的工具。在日常生活中,无论是计算租金、核对账单总额,还是计算孩子成绩的最终百分比,人们都会借助计算器来完成。
本文将利用Python编程的基础知识,包括函数、条件语句、字典和循环,来构建一个功能完备的计算器。
计算器的工作原理
所构建的计算器将遵循以下工作流程:
- 程序会提示用户输入第一个数字。
- 接着,程序会提示用户选择一个运算符号。
- 然后,程序会提示用户输入第二个数字。
- 计算器将执行相应的运算并打印输出结果。
- 程序会询问用户是希望继续使用当前结果进行计算(类似于物理计算器),还是重新开始一次新的计算。
- 如果用户选择重新开始,程序将重新启动上述整个流程。
- 如果用户选择继续使用当前结果,该结果将作为下一个计算的第一个数字,然后程序会再次提示用户选择运算符号,并依照首次计算的流程继续执行。
为了更好地理解上述逻辑,可以将其绘制成流程图:

计算器工作流程图
定义运算函数
首先,定义当用户选择相应运算符号时将被调用的函数。这里将定义add函数用于加法,subtract函数用于减法,multiply函数用于乘法,以及divide函数用于除法。这些函数都将接收两个数字作为输入参数,对它们执行选定的运算,并返回计算结果。
def add(num1, num2):
return num1 + num2
def subtract(num1, num2):
return num1 - num2
def multiply(num1, num2):
return num1 * num2
def divide(num1, num2):
return num1/num2
创建运算字典
接下来,创建一个名为operations的字典。在这个字典中,运算符号将作为键(key)存储,而对应的操作名称(即函数名)则作为值(value)存储。程序会提示用户选择一个运算,并根据用户的选择调用上面定义的具体运算函数。
operations = {
"+": add,
"-": subtract,
"*": multiply,
"/": divide,
}
获取用户输入
在定义好所有函数之后,现在需要向用户获取输入:包括第一个数字num1、用户选择的运算符号operation_symbol,以及第二个数字num2。
num1 = float(input("What is the first number?: "))
for symbol in operations:
print(symbol)
operation_symbol = input("Pick an operation: ")
num2 = float(input("What is the next number?: "))
需要注意的是,程序会将输入的数字转换为浮点数(float)类型。此外,代码中还包含一个for循环,用于遍历之前定义的operations字典中的所有键(即运算符号),并将它们打印出来供用户选择。
计算并显示结果
接下来是计算答案并将其完整地打印给用户。以下代码将用于实现这一目的:
answer = operations[operation_symbol](num1, num2)
print(f"{num1} {operation_symbol} {num2} = {answer}")
answer变量将存储根据所选运算符号调用相应函数后得到的值。为了正确格式化输出语句,代码中使用了f-string。
使用While循环实现计算器连续性
在计算并显示结果之后,下一步是检查用户是否希望继续使用计算器,即是基于当前结果answer继续计算,还是重新开始一次全新的计算。为此,程序会定义一个布尔变量should_accumulate。当用户选择继续计算时,该变量为True;当用户选择不继续并希望重新启动计算器时,该变量为False。should_accumulate变量将在代码的早期部分进行定义。
should_accumulate = True
while should_accumulate:
...
choice = input(f"Type 'y' to continue calculating with {answer}, or type 'n' to start a new calculation: ")
if choice == "y":
num1 = answer
else:
should_accumulate = False
print("
" * 20)
由于should_accumulate变量被初始化为True,并且代码中添加了一个while循环,因此循环内部的代码将持续运行,直到用户输入‘n’。当用户选择‘n’时,计算将不再继续,而是停止。代码会通过打印20行空行来模拟清空控制台。然而,若要真正重启计算器,这里将引入Python中一个名为“递归”的函数概念。
为了实现计算器的重启功能,可以将整个计算逻辑封装为一个函数。当需要重新启动计算器而不继续使用上次的结果时,就可以调用这个函数。这将通过一个递归函数来实现。Python中的递归允许函数在其自身内部被调用,具体实现如下所示:
def calculator():
should_accumulate = True
num1 = float(input("What is the first number?: "))
while should_accumulate:
for symbol in operations:
print(symbol)
operation_symbol = input("Pick an operation: ")
num2 = float(input("What is the next number?: "))
answer = operations[operation_symbol](num1, num2)
print(f"{num1} {operation_symbol} {num2} = {answer}")
choice = input(f"Type 'y' to continue calculating with {answer}, or type 'n' to start a new calculation: ")
if choice == "y":
num1 = answer
else:
should_accumulate = False
print("
" * 20)
calculator()
请注意,calculator函数在其自身内部被调用了。为了首次运行这段代码,需要在函数外部显式地调用calculator()。
您可以通过以下链接获取完整的代码示例:https://github.com/MahnoorJaved98/Using-Python-to-Build-a-Calculator
总结
通过本文的学习,读者应该已经掌握了如何利用Python的基础语法和特性(如函数、字典、循环和递归)来构建一个功能完整的交互式计算器。这个项目不仅实践了Python编程的基本功,也展示了如何将抽象的逻辑思维转化为实际可运行的代码。希望这个实践能激发读者对Python编程的兴趣,并在未来的学习和项目中加以应用。
