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

x33g5p2x  于2021-10-28 转载在 Python  
字(8.3k)|赞(0)|评价(0)|浏览(441)

介绍

在处理数字和计算数学表达式时,Python 编程语言是一个很好的工具。这种品质可用于制作有用的程序。

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

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

先决条件

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

步骤 1 — 提示用户输入

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

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

nano calculator.py

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

计算器.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() 将数据作为字符串输入,并且不知道您正在寻找数字。

你会想在这个程序中使用数字有两个原因:

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

根据计算器的需要,您可能希望将来自 input() 函数的字符串转换为整数或浮点数。对于本教程,整数适合我们的目的,因此将 input() 函数包装在 int() 函数中以将输入转换为整数数据类型:
计算器.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 步 - 添加运算符

在程序完成之前,您将总共添加四个数学运算符:+ 用于加法,- 用于减法,/* 用于乘法,以及 [[$15$] ] 为除法。

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

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

计算器.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)

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

第 3 步 - 添加条件语句

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 语句,以及 [ [$28$]] 语句将用于处理如果用户没有输入操作符符号的错误:

计算器.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 语句有一些错误处理,但您可以更清楚地接受,例如,除了大写 $41$N。为此,添加字符串函数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 运行您的程序,并且您可以根据需要进行多次计算。

第 5 步 - 改进代码

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

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

有机会在整个程序中引入更多的错误处理。对于初学者来说,即使用户在要求输入数字时键入 plankton,您也可以确保程序继续运行。由于程序现在,如果 number_1number_2 不是整数,用户将收到错误并且程序将停止运行。此外,对于当用户选择除法运算符 (/) 并为他们的第二个数字 (number_2) 输入 0 的情况下,用户将收到 [[$53$] ]] 错误。为此,您可能希望对 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

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

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

结论

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

相关文章