如何在Python3中制作计算器程序

来自菜鸟教程
跳转至:导航、​搜索

介绍

Python 编程语言是处理数字和评估数学表达式时使用的绝佳工具。 这种品质可以用来制作有用的程序。

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

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

先决条件

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

第 1 步——提示用户输入

当人类提供方程式供计算机求解时,计算器效果最佳。 您将在人类输入他们希望计算机使用的数字时开始编写程序。

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

nano calculator.py

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

计算器.py

number_1 = input('Enter your first number: ')
number_2 = input('Enter your second number: ')

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

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

python calculator.py

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

OutputEnter your first number: 5
Enter your second number: 7

如果你运行这个程序几次并改变你的输入,你会注意到你可以在提示时输入任何你想要的东西,包括单词、符号、空格或回车键。 这是因为 input() 将数据作为 strings 输入并且不知道您正在寻找数字。

您需要在此程序中使用数字有两个原因:

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

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

计算器.py

number_1 = int(input('Enter your first number: '))
number_2 = int(input('Enter your second number: '))

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

OutputEnter your first number: 23
Enter your second number: 674

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

OutputEnter your first number: sammy
Traceback (most recent call last):
  File "testing.py", line 1, in <module>
    number_1 = int(input('Enter your first number: '))
ValueError: invalid literal for int() with base 10: 'sammy'

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

第 2 步 - 添加运算符

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

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

计算器.py

number_1 = int(input('Enter your first number: '))
number_2 = int(input('Enter your second number: '))

print(number_1 + number_2)

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

OutputEnter your first number: 8
Enter your second number: 3
11

输出显示程序运行正常。 现在,为用户添加更多上下文,以便在整个程序运行时充分了解情况。 为此,请使用 string formatters 帮助正确格式化文本并提供反馈。 您希望用户收到有关他们正在输入的数字以及与生成的结果一起使用的运算符的确认信息:

计算器.py

number_1 = int(input('Enter your first number: '))
number_2 = int(input('Enter your second number: '))

print('{} + {} = '.format(number_1, number_2))
print(number_1 + number_2)

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

OutputEnter your first number: 90
Enter your second number: 717
90 + 717 = 
807

使用字符串格式化程序可以为用户提供更多反馈。

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

计算器.py

number_1 = int(input('Enter your first number: '))
number_2 = int(input('Enter your second number: '))

# Addition
print('{} + {} = '.format(number_1, number_2))
print(number_1 + number_2)

# Subtraction
print('{} - {} = '.format(number_1, number_2))
print(number_1 - number_2)

# Multiplication
print('{} * {} = '.format(number_1, number_2))
print(number_1 * number_2)

# Division
print('{} / {} = '.format(number_1, number_2))
print(number_1 / number_2)

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

第三步——添加条件语句

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

使用三引号在几个不同的行上写一个字符串:

'''
Please type in the math operation you would like to complete:
+ for addition
- for subtraction
* for multiplication
/ for division
'''

该程序使用每个运算符符号供用户选择,因此如果用户想要执行除法,他们将键入 /。 不过,您可以选择任何您想要的符号,例如 1 for additionb for subtraction

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

计算器.py

operation = input('''
Please type in the math operation you would like to complete:
+ for addition
- for subtraction
* for multiplication
/ for division
''')

number_1 = int(input('Enter your first number: '))
number_2 = int(input('Enter your second number: '))

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 个 else-if 或 elif 语句,并且 [如果用户没有输入操作符符号,X202X] 语句将用于处理错误:

计算器.py

operation = input('''
Please type in the math operation you would like to complete:
+ for addition
- for subtraction
* for multiplication
/ for division
''')

number_1 = int(input('Enter your first number: '))
number_2 = int(input('Enter your second number: '))

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('You have not typed a valid operator, please run the program again.')

要浏览这个程序,首先它会提示用户输入一个操作符号。 例如,假设用户输入 * 进行乘法运算。 接下来,程序要求输入两个数字,用户输入 5840。 此时,程序显示执行的方程和乘积:

OutputPlease type in the math operation you would like to complete:
+ for addition
- for subtraction
* for multiplication
/ for division
* 
Please enter the first number: 58
Please enter the second number: 40
58 * 40 = 
2320

由于您构建程序的方式,如果用户在第一次提示时要求操作时输入 %,他们将不会收到反馈以再次尝试,直到输入数字后。 您可能需要考虑其他可能的选项来处理各种情况。

此时,您拥有一个功能齐全的程序,但如果不再次运行该程序,您就无法执行第二次或第三次操作。 下一步涉及定义一些函数以将此功能添加到程序中。

第 4 步——定义函数

为了处理用户想要多次执行程序的能力,您将定义一些函数。 首先,将您现有的代码块放入一个函数中。 将函数命名为 calculate() 并在函数本身内添加额外的缩进层。 为确保程序运行,您还将调用文件底部的函数:

计算器.py

# Define our function
def calculate():
    operation = input('''
Please type in the math operation you would like to complete:
+ for addition
- for subtraction
* for multiplication
/ for division
''')

    number_1 = int(input('Please enter the first number: '))
    number_2 = int(input('Please enter the second number: '))

    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('You have not typed a valid operator, please run the program again.')

# Call calculate() outside of the function
calculate()

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

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

计算器.py

... 
# Define again() function to ask user if they want to use the calculator again
def again():

    # Take input from user
    calc_again = input('''
Do you want to calculate again?
Please type Y for YES or N for NO.
''')

    # If user types Y, run the calculate() function
    if calc_again == 'Y':
        calculate()

    # If user types N, say good-bye to the user and end the program
    elif calc_again == 'N':
        print('See you later.')

    # If user types another key, run the function again
    else:
        again()

# Call calculate() outside of the function
calculate()

尽管上面的 else 语句有一些错误处理,但您可能会更清楚地接受,例如,除了大写 YN。 为此,添加 字符串函数 str.upper()

计算器.py

...
def again():
    calc_again = input('''
Do you want to calculate again?
Please type Y for YES or N for NO.
''')

    # Accept 'y' or 'Y' by adding str.upper()
    if calc_again.upper() == 'Y':
        calculate()

    # Accept 'n' or 'N' by adding str.upper()
    elif calc_again.upper() == 'N':
        print('See you later.')

    else:
        again()
...

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

计算器.py

def calculate():
    operation = input('''
Please type in the math operation you would like to complete:
+ for addition
- for subtraction
* for multiplication
/ for division
''')

    number_1 = int(input('Please enter the first number: '))
    number_2 = int(input('Please enter the second number: '))

    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('You have not typed a valid operator, please run the program again.')

    # Add again() function to calculate() function
    again()

def again():
    calc_again = input('''
Do you want to calculate again?
Please type Y for YES or N for NO.
''')

    if calc_again.upper() == 'Y':
        calculate()
    elif calc_again.upper() == 'N':
        print('See you later.')
    else:
        again()

calculate()

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

第五步——改进代码

现在你有了一个不错的、功能齐全的程序。 但是,您可以做更多的事情来改进此代码。 您可以添加一个欢迎功能,例如,在程序代码的顶部欢迎人们加入程序,如下所示:

def welcome():
    print('''
Welcome to Calculator
''')
...
# Don’t forget to call the function
welcome()
calculate()

有机会在整个程序中引入更多的错误处理。 对于初学者,即使用户在要求输入数字时键入 plankton,您也可以确保程序继续运行。 由于程序现在,如果number_1number_2不是整数,用户会得到一个错误,程序将停止运行。 此外,对于用户选择除法运算符 (/) 并输入 0 作为第二个数字 (number_2) 的情况,用户将收到 [ X160X] 错误。 为此,您可能希望对 try ... except 语句使用异常处理。

本练习将您限制为四个运算符,但您可以添加其他运算符,如下所示:

...
    operation = input('''
Please type in the math operation you would like to complete:
+ for addition
- for subtraction
* for multiplication
/ for division
** for power
% for modulo
''')
...
# Don’t forget to add more conditional statements to solve for power and modulo

此外,您可能希望使用循环语句重写部分程序。

有很多方法可以处理错误以及修改和改进每个编码项目。 重要的是要记住,没有一种正确的方法可以解决我们遇到的问题。

结论

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

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

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