如何用 Python 3 制作计算器程序

介绍

Python 编程语言是一个很好的工具,可以用来处理数字和评估数学表达式,这种质量可以用来制作有用的程序。

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

我们将使用 数学操作员, 变量, 条件陈述, 函数,并处理用户输入来制作我们的计算器。

前提条件

对于本教程,您应该在本地计算机上安装Python 3,并在机器上设置一个编程环境. 如果您需要安装Python或设置环境,您可以通过遵循 适当的操作系统指南来做到这一点。

步骤 1 – 请用户输入

计算机在人类提供计算机解决方程式时最有效,你会在人类输入计算机希望计算机使用的数字时开始写你的程序。

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

1nano calculator.py

接下来,你会将内容添加到这个文件来运行你的程序. 对于这个程序,你将有用户输入两个数字,所以指示程序请用户请求两个数字. 您可以通过使用Python的内置input()函数来接受用户生成的键盘输入。 在input()函数的窗口中,您可以传递一个 string向用户请求,然后将用户的输入分配给一个变量。 请记住,在请求输入时,在你的字符串的末尾包含一个空间,以便用户的输入和提示字符串之间有一个空间:

1[label calculator.py]
2number_1 = input('Enter your first number: ')
3number_2 = input('Enter your second number: ')

如果您使用nano,您可以通过按CTRL + X然后按YENTER退出。

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

1python calculator.py

这将启动您的程序的提示,您可以在终端窗口中回复:

1[secondary_label Output]
2Enter your first number: 5
3Enter your second number: 7

如果你运行这个程序几次,并改变你的输入,你会注意到,当被提示时,你可以输入任何你想要的内容,包括单词,符号,白色空间或输入键。

您将因为两个原因在这个程序中使用数字:

  1. 允许程序进行数学计算
  2. 验证用户的输入是数字字符串

根据您的计算机的需求,您可能希望将从 input() 函数中输入的字符串转换为整数或浮数. 对于本教程,整数适合我们的目的,所以在 int() 函数中嵌入 input() 函数以 转换输入到 integer data type:

1[label calculator.py]
2number_1 = int(input('Enter your first number: '))
3number_2 = int(input('Enter your second number: '))

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

1[secondary_label Output]
2Enter your first number: 23
3Enter your second number: 674

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

1[secondary_label Output]
2Enter your first number: sammy
3Traceback (most recent call last):
4  File "testing.py", line 1, in <module>
5    number_1 = int(input('Enter your first number: '))
6ValueError: invalid literal for int() with base 10: 'sammy'

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

步骤 2 - 添加操作员

在程序完成之前,您将添加共四个数学运算符(https://andsky.com/tech/tutorials/how-to-do-math-in-python-3-with-operators): + 用于添加, - 用于减去, * 用于倍增,和 / 用于分割。

当你构建程序时,你会想确保每个部分正常工作,所以从设置附加开始,你会在打印函数中添加两个数字,以便使用计算机的人能够看到内容:

1[label calculator.py]
2number_1 = int(input('Enter your first number: '))
3number_2 = int(input('Enter your second number: '))
4
5print(number_1 + number_2)

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

1[secondary_label Output]
2Enter your first number: 8
3Enter your second number: 3
411

输出显示程序正在正常工作. 现在,添加一些更多的背景,让用户在程序的运行时间内得到充分的信息. 要做到这一点,请使用 string formatters来帮助正确格式化文本并提供反馈。

1[label calculator.py]
2number_1 = int(input('Enter your first number: '))
3number_2 = int(input('Enter your second number: '))
4
5print('{} + {} = '.format(number_1, number_2))
6print(number_1 + number_2)

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

1[secondary_label Output]
2Enter your first number: 90
3Enter your second number: 717
490 + 717 = 
5807

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

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

 1[label calculator.py]
 2number_1 = int(input('Enter your first number: '))
 3number_2 = int(input('Enter your second number: '))
 4
 5# Addition
 6print('{} + {} = '.format(number_1, number_2))
 7print(number_1 + number_2)
 8
 9# Subtraction
10print('{} - {} = '.format(number_1, number_2))
11print(number_1 - number_2)
12
13# Multiplication
14print('{} * {} = '.format(number_1, number_2))
15print(number_1 * number_2)
16
17# Division
18print('{} / {} = '.format(number_1, number_2))
19print(number_1 / number_2)

在这里,您正在将剩余的操作员, -, *,和 /` 添加到上面的程序中. 如果您在这个时候运行该程序,该程序将执行上述所有操作。

步骤 3 – 添加条件声明

calculator.py程序的目标是让用户能够从不同的操作员中进行选择,开始在程序顶部添加一些信息,以及做出选择,以便该人知道该做什么。

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

1'''
2Please type in the math operation you would like to complete:
3+ for addition
4- for subtraction
5* for multiplication
6/ for division
7'''

这个程序使用每个操作符号为用户做出他们的选择,所以如果用户希望进行分割,他们将键入 /. 您可以选择任何您想要的符号,例如 1 添加,或 b 减去

因为你要求用户输入,你要使用input()函数. 将字符串放入input()函数内,然后将该输入的值传递给一个变量,你将其命名为操作:

 1[label calculator.py]
 2operation = input('''
 3Please type in the math operation you would like to complete:
 4+ for addition
 5- for subtraction
 6* for multiplication
 7/ for division
 8''')
 9
10number_1 = int(input('Enter your first number: '))
11number_2 = int(input('Enter your second number: '))
12
13print('{} + {} = '.format(number_1, number_2))
14print(number_1 + number_2)
15
16print('{} - {} = '.format(number_1, number_2))
17print(number_1 - number_2)
18
19print('{} * {} = '.format(number_1, number_2))
20print(number_1 * number_2)
21
22print('{} / {} = '.format(number_1, number_2))
23print(number_1 / number_2)

在此时,如果您运行该程序,不会发生任何事情,无论您在第一个提示时输入了什么。 要纠正这一点,请在程序中添加一些条件声明. 由于您如何构建该程序,如果声明将是添加的位置,将有3个其他如果或elif声明为其他操作员,并且如果用户没有输入操作符号,则将设置else声明来处理错误:

 1[label calculator.py]
 2operation = input('''
 3Please type in the math operation you would like to complete:
 4+ for addition
 5- for subtraction
 6* for multiplication
 7/ for division
 8''')
 9
10number_1 = int(input('Enter your first number: '))
11number_2 = int(input('Enter your second number: '))
12
13if operation == '+':
14    print('{} + {} = '.format(number_1, number_2))
15    print(number_1 + number_2)
16
17elif operation == '-':
18    print('{} - {} = '.format(number_1, number_2))
19    print(number_1 - number_2)
20
21elif operation == '*':
22    print('{} * {} = '.format(number_1, number_2))
23    print(number_1 * number_2)
24
25elif operation == '/':
26    print('{} / {} = '.format(number_1, number_2))
27    print(number_1 / number_2)
28
29else:
30    print('You have not typed a valid operator, please run the program again.')

例如,说用户输入 * 来倍增,接下来,程序要求两个数字,用户输入 5840

 1[secondary_label Output]
 2Please type in the math operation you would like to complete:
 3+ for addition
 4- for subtraction
 5* for multiplication
 6/ for division
 7* 
 8Please enter the first number: 58
 9Please enter the second number: 40
1058 * 40 = 
112320

由于您如何构建程序,如果用户在第一个提示时被要求进行操作时输入%,他们不会收到反馈,直到输入数字后才会再次尝试。

在此时,你有一个完全功能的程序,但你不能执行第二或第三个操作,而不重新运行该程序。

步骤4:定义功能

要处理用户想要执行程序的几次能力,您将定义一些函数. 首先,将现有的代码块放入一个函数. 命名函数 calculate(),并在函数本身中添加一个额外的入口层。

 1[label calculator.py]
 2# Define our function
 3def calculate():
 4    operation = input('''
 5Please type in the math operation you would like to complete:
 6+ for addition
 7- for subtraction
 8* for multiplication
 9/ for division
10''')
11
12    number_1 = int(input('Please enter the first number: '))
13    number_2 = int(input('Please enter the second number: '))
14
15    if operation == '+':
16        print('{} + {} = '.format(number_1, number_2))
17        print(number_1 + number_2)
18
19    elif operation == '-':
20        print('{} - {} = '.format(number_1, number_2))
21        print(number_1 - number_2)
22
23    elif operation == '*':
24        print('{} * {} = '.format(number_1, number_2))
25        print(number_1 * number_2)
26
27    elif operation == '/':
28        print('{} / {} = '.format(number_1, number_2))
29        print(number_1 / number_2)
30
31    else:
32        print('You have not typed a valid operator, please run the program again.')
33
34# Call calculate() outside of the function
35calculate()

接下来,创建一个由更多条件陈述组成的第二个函数. 在这个代码块中,你要给用户选择他们是否想要重新计算,你可以基于计算机的条件陈述,但在这种情况下,你只有一个如果,一个elif和一个else来处理错误。

命名此函数 again(),并在 def calculate(): 代码块后添加它:

 1[label calculator.py]
 2... 
 3# Define again() function to ask user if they want to use the calculator again
 4def again():
 5
 6    # Take input from user
 7    calc_again = input('''
 8Do you want to calculate again?
 9Please type Y for YES or N for NO.
10''')
11
12    # If user types Y, run the calculate() function
13    if calc_again == 'Y':
14        calculate()
15
16    # If user types N, say good-bye to the user and end the program
17    elif calc_again == 'N':
18        print('See you later.')
19
20    # If user types another key, run the function again
21    else:
22        again()
23
24# Call calculate() outside of the function
25calculate()

虽然与上面的其他陈述有某些错误处理,但你可能可以更清楚地接受,例如,除了上面的情况YN之外,一个较低的案例yn

 1[label calculator.py]
 2...
 3def again():
 4    calc_again = input('''
 5Do you want to calculate again?
 6Please type Y for YES or N for NO.
 7''')
 8
 9    # Accept 'y' or 'Y' by adding str.upper()
10    if calc_again.upper() == 'Y':
11        calculate()
12
13    # Accept 'n' or 'N' by adding str.upper()
14    elif calc_again.upper() == 'N':
15        print('See you later.')
16
17    else:
18        again()
19...

在此时,您应该在计算( )函数的末尾添加再来( )函数,这样它就会触发用户是否想继续的代码:

 1[label calculator.py]
 2def calculate():
 3    operation = input('''
 4Please type in the math operation you would like to complete:
 5+ for addition
 6- for subtraction
 7* for multiplication
 8/ for division
 9''')
10
11    number_1 = int(input('Please enter the first number: '))
12    number_2 = int(input('Please enter the second number: '))
13
14    if operation == '+':
15        print('{} + {} = '.format(number_1, number_2))
16        print(number_1 + number_2)
17
18    elif operation == '-':
19        print('{} - {} = '.format(number_1, number_2))
20        print(number_1 - number_2)
21
22    elif operation == '*':
23        print('{} * {} = '.format(number_1, number_2))
24        print(number_1 * number_2)
25
26    elif operation == '/':
27        print('{} / {} = '.format(number_1, number_2))
28        print(number_1 / number_2)
29
30    else:
31        print('You have not typed a valid operator, please run the program again.')
32
33    # Add again() function to calculate() function
34    again()
35
36def again():
37    calc_again = input('''
38Do you want to calculate again?
39Please type Y for YES or N for NO.
40''')
41
42    if calc_again.upper() == 'Y':
43        calculate()
44    elif calc_again.upper() == 'N':
45        print('See you later.')
46    else:
47        again()
48
49calculate()

您现在可以在终端窗口中使用「python calculator.py」运行您的程序,您将能够计算您想要的次数。

步骤五:改进代码

现在你有一个不错的,完全功能的程序. 但是,你可以做更多的事情来改进这个代码. 您可以添加一个欢迎的功能,例如,欢迎人们到程序的代码的顶部,如下:

1def welcome():
2    print('''
3Welcome to Calculator
4''')
5...
6# Don’t forget to call the function
7welcome()
8calculate()

有机会在整个程序中引入更多的错误处理。 对于初学者来说,您可以确保程序继续运行,即使用户在请求数字时键入plankton。 由于程序现在,如果number_1number_2不是整数,用户会收到一个错误,并且程序会停止运行。 此外,对于用户选择分区操作员(/)和为其第二个数字(number_2)键入0的情况下,用户将收到一个ZeroDivisionError: division by zero错误。

这个练习限制了你到四个操作员,但你可以添加额外的操作员,如:

 1...
 2    operation = input('''
 3Please type in the math operation you would like to complete:
 4+ for addition
 5- for subtraction
 6* for multiplication
 7/ for division
 8** for power
 9% for modulo
10''')
11...
12# Don’t forget to add more conditional statements to solve for power and modulo

此外,您可能想要用循环语句重写程序的一部分。

有很多方法来处理错误,修改和改进每个编码项目,重要的是要记住,没有一个正确的方法来解决我们所面临的问题。

结论

完成本教程后,您将能够修改和改进代码,并在需要用户输入命令行的其他项目上工作。

我们很乐意看到您对这个基本的命令行计算机项目的解决方案! 请在评论中发布您的计算机项目。

接下来,您可能想要创建一个基于文本的游戏,例如Tic-tac-toe或Rock-paper-scissors。

Published At
Categories with 技术
comments powered by Disqus