当前位置: 首页 > news >正文

如何在 Python 3 中制作一个计算器程序

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

简介

Python 编程语言是处理数字和求解数学表达式的强大工具。这种特性可以用来制作有用的程序。

本教程介绍了如何在 Python 3 中制作一个命令行计算器程序的学习练习。这个计算器只能执行基本的算术运算,但本指南的最后一步可以作为改进代码以创建更强大计算器的起点。

我们将使用数学运算符、变量、条件语句、函数和处理用户输入来制作我们的计算器。

先决条件

在进行本教程之前,您应该在本地计算机上安装了 Python 3,并已在计算机上设置好编程环境。如果您需要安装 Python 或设置环境,可以按照适用于您操作系统的指南进行操作。

步骤 1 —— 提示用户输入

当人类提供方程式供计算机求解时,计算器的效果最佳。您将从用户输入数字的地方开始编写程序。

首先,您需要为程序创建一个文件。在本例中,我们将使用文本编辑器 nano 并将文件命名为 calculator.py

nano calculator.py

接下来,您将向该文件添加内容以运行程序。对于这个程序,您将要求用户输入两个数字,因此指示程序提示用户输入两个数字。您可以使用 Python 的内置 input() 函数从键盘接受用户生成的输入。在 input() 函数的括号内,您可以传递一个字符串以提示用户,然后将用户的输入赋给一个变量。请记住,在请求输入时,在您的字符串末尾包含一个空格可能会有所帮助,这样用户的输入和提示字符串之间就会有一个空格:

number_1 = input('输入第一个数字:')
number_2 = input('输入第二个数字:')

在写完两行后,您应该在运行程序之前保存程序。如果您使用的是 nano,您可以按 CTRL + X 然后按 YENTER 退出。

使用以下命令运行您的程序:

python calculator.py

这将开始您的程序的提示,您可以在终端窗口中进行响应:

输入第一个数字:5
输入第二个数字:7

如果您多次运行此程序并改变输入,您会注意到您可以在提示时输入任何内容,包括单词、符号、空格或回车键。这是因为 input() 将数据作为字符串接收,并不知道您要寻找数字。

您将希望在此程序中使用数字有两个原因:

  1. 使程序能够执行数学计算
  2. 验证用户的输入是否为数字字符串

根据计算器的需求,您可能希望将从 input() 函数得到的字符串转换为整数或浮点数。对于本教程,整数适合我们的目的,因此将 input() 函数包装在 int() 函数中以将输入转换为整数数据类型:

number_1 = int(input('输入第一个数字:'))
number_2 = int(input('输入第二个数字:'))

现在,如果您运行程序并输入两个整数,您将不会遇到错误:

输入第一个数字:23
输入第二个数字:674

但是,如果您输入字母、符号或任何其他非整数,您将遇到以下错误:

输入第一个数字:sammy
Traceback (most recent call last):File "testing.py", line 1, in <module>number_1 = int(input('输入第一个数字:'))
ValueError: invalid literal for int() with base 10: 'sammy'

到目前为止,您已经设置了两个变量以存储整数数据类型的用户输入。您还可以尝试将输入转换为浮点数。

步骤 2 —— 添加运算符

在程序完成之前,您将添加共计四个数学运算符:+ 用于加法、- 用于减法、* 用于乘法和 / 用于除法。

在构建程序时,您将希望确保每个部分都能正常运行,因此从设置加法开始。您将在一个打印函数中添加两个数字,以便使用计算器的人能够看到内容:

number_1 = int(input('输入第一个数字:'))
number_2 = int(input('输入第二个数字:'))print(number_1 + number_2)

运行程序并在提示时输入两个数字,以确保它按预期工作:

输入第一个数字:8
输入第二个数字:3
11

输出显示程序正在正确运行。现在,为用户提供更多上下文以便在程序运行时得到充分的信息。为此,使用字符串格式化来帮助正确格式化文本并提供反馈。您希望用户收到有关他们输入的数字和正在使用的运算符以及产生的结果的确认:

number_1 = int(input('输入第一个数字:'))
number_2 = int(input('输入第二个数字:'))print('{} + {} = '.format(number_1, number_2))
print(number_1 + number_2)

现在,当您运行程序时,将会有额外的输出,让用户确认程序正在执行的数学表达式:

输入第一个数字:90
输入第二个数字:717
90 + 717 = 
807

使用字符串格式化为用户提供了更多的反馈。

此时,您可以使用与加法相同的格式向程序添加其余的运算符:

# 加法
print('{} + {} = '.format(number_1, number_2))
print(number_1 + number_2)# 减法
print('{} - {} = '.format(number_1, number_2))
print(number_1 - number_2)# 乘法
print('{} * {} = '.format(number_1, number_2))
print(number_1 * number_2)# 除法
print('{} / {} = '.format(number_1, number_2))
print(number_1 / number_2)

在上面的程序中,你正在将剩余的运算符 -*/ 添加到程序中。如果此时运行程序,程序将执行上述所有操作。但是,你希望限制程序一次只执行一个操作。为此,你将使用条件语句。

步骤 3 —— 添加条件语句

calculator.py 程序的目标是让用户能够在不同的运算符中进行选择。首先在程序顶部添加一些信息以及一个选择,以便用户知道该怎么做。

通过使用三重引号在几行上写一个字符串:

'''
请输入您想要完成的数学运算:
+ 代表加法
- 代表减法
* 代表乘法
/ 代表除法
'''

该程序使用每个运算符符号供用户进行选择,因此如果用户想要执行除法,他们将输入 /。你可以选择任何你想要的符号,比如 1 代表加法b 代表减法

因为你要求用户输入,所以你需要使用 input() 函数。将字符串放入 input() 函数中,并将该输入的值传递给一个变量,你将其命名为 operation

operation = input('''
请输入您想要完成的数学运算:
+ 代表加法
- 代表减法
* 代表乘法
/ 代表除法
''')number_1 = int(input('输入第一个数字:'))
number_2 = int(input('输入第二个数字:'))print('{} + {} = '.format(number_1, number_2))
print(number_1 + number_2)print('{} - {} = '.format(number_1, number_2))
print(number_1 - number_2)print('{} * {} = '.format(number_1, number_2))
print(number_1 * number_2)print('{} / {} = '.format(number_1, number_2))
print(number_1 / number_2)

此时,如果运行程序,无论在第一个提示处输入什么,都不会发生任何事情。为了纠正这一点,将一些条件语句添加到程序中。由于你已经构建了程序的结构,if 语句将执行加法,将有 3 个 elif 语句用于其他每个运算符,else 语句将用于处理用户未输入运算符符号的错误:

operation = input('''
请输入您想要完成的数学运算:
+ 代表加法
- 代表减法
* 代表乘法
/ 代表除法
''')number_1 = int(input('输入第一个数字:'))
number_2 = int(input('输入第二个数字:'))if operation == '+':print('{} + {} = '.format(number_1, number_2))print(number_1 + number_2)elif operation == '-':print('{} - {} = '.format(number_1, number_2))print(number_1 - number_2)elif operation == '*':print('{} * {} = '.format(number_1, number_2))print(number_1 * number_2)elif operation == '/':print('{} / {} = '.format(number_1, number_2))print(number_1 / number_2)else:print('您未输入有效的运算符,请重新运行程序。')

通过这个程序,首先提示用户输入一个运算符。例如,假设用户输入 * 来进行乘法。接下来,程序要求输入两个数字,用户输入 5840。此时,程序显示执行的等式和乘积:

请输入您想要完成的数学运算:
+ 代表加法
- 代表减法
* 代表乘法
/ 代表除法
* 
请输入第一个数字:58
请输入第二个数字:40
58 * 40 = 
2320

由于你构建了程序的结构,如果用户在第一个提示处输入 %,他们直到输入数字后才会收到再次尝试的反馈。你可能需要考虑处理各种情况的其他可能选项。

此时,你已经有了一个完全功能的程序,但是无法执行第二或第三个操作,除非再次运行程序。下一步涉及定义一些函数,以将此功能添加到程序中。


## 第四步 —— 定义函数为了处理用户想要执行程序多次的能力,您需要定义一些函数。首先,将您现有的代码块放入一个函数中。将该函数命名为 `calculate()`,并在函数内部添加一个额外的缩进。为了确保程序运行,您还需要在文件底部调用该函数:```python
# 定义我们的函数
def calculate():operation = input('''
请输入您想要执行的数学运算:
+ 代表加法
- 代表减法
* 代表乘法
/ 代表除法
''')number_1 = int(input('请输入第一个数字:'))number_2 = int(input('请输入第二个数字:'))if operation == '+':print('{} + {} = '.format(number_1, number_2))print(number_1 + number_2)elif operation == '-':print('{} - {} = '.format(number_1, number_2))print(number_1 - number_2)elif operation == '*':print('{} * {} = '.format(number_1, number_2))print(number_1 * number_2)elif operation == '/':print('{} / {} = '.format(number_1, number_2))print(number_1 / number_2)else:print('您没有输入有效的运算符,请重新运行程序。')# 在函数外调用 calculate()
calculate()

接下来,创建第二个由更多条件语句组成的函数。在这段代码中,您希望让用户选择是否要再次计算。您可以基于计算器条件语句来实现这一点,但在这种情况下,您只需要一个 if、一个 elif 和一个 else 来处理错误。

将这个函数命名为 again(),并将其添加到 def calculate(): 代码块之后:

... 
# 定义 again() 函数来询问用户是否要再次使用计算器
def again():# 从用户处获取输入calc_again = input('''
您想要再次计算吗?
请输入 Y 表示是,N 表示否。
''')# 如果用户输入 Y,则运行 calculate() 函数if calc_again == 'Y':calculate()# 如果用户输入 N,则向用户道别并结束程序elif calc_again == 'N':print('再见。')# 如果用户输入其他键,则再次运行该函数else:again()# 在函数外调用 calculate()
calculate()

虽然上面的 else 语句中有一些错误处理,但您可能希望更清楚地接受小写的 yn,除了大写的 YN。为此,可以添加字符串函数 str.upper()

...
def again():calc_again = input('''
您想要再次计算吗?
请输入 Y 表示是,N 表示否。
''')# 通过添加 str.upper() 来接受 'y' 或 'Y'if calc_again.upper() == 'Y':calculate()# 通过添加 str.upper() 来接受 'n' 或 'N'elif calc_again.upper() == 'N':print('再见。')else:again()
...

此时,您应该将 again() 函数添加到 calculate() 函数的末尾,以触发询问用户是否继续的代码:

def calculate():operation = input('''
请输入您想要执行的数学运算:
+ 代表加法
- 代表减法
* 代表乘法
/ 代表除法
''')number_1 = int(input('请输入第一个数字:'))number_2 = int(input('请输入第二个数字:'))if operation == '+':print('{} + {} = '.format(number_1, number_2))print(number_1 + number_2)elif operation == '-':print('{} - {} = '.format(number_1, number_2))print(number_1 - number_2)elif operation == '*':print('{} * {} = '.format(number_1, number_2))print(number_1 * number_2)elif operation == '/':print('{} / {} = '.format(number_1, number_2))print(number_1 / number_2)else:print('您没有输入有效的运算符,请重新运行程序。')# 将 again() 函数添加到 calculate() 函数again()def again():calc_again = input('''
您想要再次计算吗?
请输入 Y 表示是,N 表示否。
''')if calc_again.upper() == 'Y':calculate()elif calc_again.upper() == 'N':print('再见。')else:again()calculate()

现在,您可以在终端窗口中使用 python calculator.py 运行您的程序,并且可以随意进行多次计算。

步骤 5 —— 改进代码

现在你有一个不错、完全功能的程序。然而,你可以做很多事情来改进这段代码。例如,你可以添加一个欢迎函数,在程序的顶部欢迎用户进入程序,就像这样:

def welcome():print('''
欢迎使用计算器
''')
...
# 别忘了调用这个函数
welcome()
calculate()

在整个程序中有很多机会引入更多的错误处理。首先,你可以确保即使用户在要求输入数字时输入 plankton,程序仍然可以继续运行。因为在当前程序中,如果 number_1number_2 不是整数,用户将会收到一个错误并且程序将停止运行。另外,当用户选择除法运算符(/)并且在第二个数字(number_2)中输入 0 时,用户将收到一个 ZeroDivisionError: division by zero 错误。对于这一点,你可能想要使用 try ... except 语句进行异常处理。

这个练习限制了你只能使用四个运算符,但你可以添加额外的运算符,比如:

...operation = input('''
请输入您想要完成的数学运算:
+ 代表加法
- 代表减法
* 代表乘法
/ 代表除法
** 代表乘方
% 代表取模
''')
...
# 别忘了添加更多的条件语句来解决乘方和取模

另外,你可能想要使用循环语句重写部分程序。

处理错误、修改和改进每一个编码项目的方法有很多种。重要的是要记住,解决问题的方法并不是唯一的。

结论

本教程介绍了在命令行上构建计算器的一种可能方法。完成本教程后,你将能够修改和改进代码,并且在其他需要在命令行上接收用户输入的项目上工作。

我们很感兴趣看到你对这个基本命令行计算器项目的解决方案!请随时在评论中发布你的计算器项目。

接下来,你可能想要创建一个基于文本的游戏,比如井字游戏或者石头剪刀布。

http://www.lryc.cn/news/453904.html

相关文章:

  • 搭建shopify本地开发环境
  • 【在Linux世界中追寻伟大的One Piece】进程信号
  • MySQL中NULL值是否会影响索引的使用
  • Chrome 浏览器:现代网络浏览的先锋
  • 蓝牙定位的MATLAB仿真程序(基于信号强度,平面内的定位,四个蓝牙基站)
  • 解决docker一直出现“=> ERROR [internal] load metadata for docker.io/library/xxx“的问题
  • Django学习笔记五:templates使用详解
  • PriorityQueue分析
  • Hive数仓操作(六)
  • centos7安装配置python3环境
  • 用 LoRA 微调 Stable Diffusion:拆开炼丹炉,动手实现你的第一次 AI 绘画
  • 手机实时提取SIM卡打电话的信令声音-(题外、插播一条广告)
  • Linux基于CentOS学习【进程状态】【进程优先级】【调度与切换】【进程挂起】【进程饥饿】
  • Golang | Leetcode Golang题解之第456题132模式
  • 回归预测|基于哈里斯鹰优化最小二乘支持向量机的数据回归预测Matlab程序HHO-LSSVM 多特征输入单输出含基础程序
  • 【Android 源码分析】Activity生命周期之onStop-1
  • 【Unity】本地化实现
  • Django一分钟:在Django中怎么存储树形结构的数据,DRF校验递归嵌套模型的替代方案
  • 【Docker从入门到进阶】06.常见问题与解决方案 07.总结与资源
  • 快速排序的非递归实现:借助栈实现、借助队列实现
  • Finops成本优化企业实践-可视化篇
  • Spring Boot中线程池使用
  • Python机器学习:自然语言处理、计算机视觉与强化学习
  • Vue2 + ElementUI + axios + VueRouter入门
  • GO网络编程(四):海量用户通信系统2:登录功能核心【重难点】
  • 某项目实战分析代码二
  • 全面指南:探索并实施解决Windows系统中“mfc140u.dll丢失”的解决方法
  • QT学习笔记1(QT和QT creator介绍)
  • 存储电话号码的数据类型,用 int 还是用 string?
  • 【目标检测】工程机械车辆数据集2690张4类VOC+YOLO格式