第三章5: 创建一个计算器

Python与算法社区

共 4864字,需浏览 10分钟

 ·

2021-02-18 22:13

这是《Python projects for beginners》原书的中文翻译,是我组织几位Python爱好者一起完成的,其中不乏几位在读博士,特别感谢参与翻译的这些小伙伴,你们辛苦了。我正以推文形式,连载出来,欢迎学习。


周五:创建一个计算器

我们已经推过这门教程的第一个项目收据打印程序,感兴趣的话,可以翻看过往的推文。今天,结合本周学习的课程,会构建一个简单的计算器,它可以接收用户输入并且输出正确结果。

最终设计

每周我们都要展示最终设计,我们会展示构建一个计算器必须的步骤:

  1. 请求用户选择他们要执行的计算
  2. 请求用户输入他们要计算的数字
  3. 为数学运算搭建try/except子句
  • a. 将输入数字转换为浮点型

  • b. 执行预算并且输出结果

  • c. 如果触发了异常,打印错误

第一步:请求用户选择要执行的计算

我们将以上每一步的代码放在不同的单元格中。这样可以将程序按照特定的步骤分成部分,更易于测试每一个步骤。第一步是请求用户输入要执行的数学运算(加,减等等):

# step 1: ask user for calculation to be performed
# 第一步:选择需要执行的计算
operation = input("Would you like to add/subtract/multiply/divide? ").lower( )
# 你要选择加法/减法/乘法/除法
print"You chose { }.".format(operation) ) # for testing purposes

运行单元格中代码。基于用户输入,输出他们的选择。你会发现在我们接收输入这行代码里,我们立即将输入转换为小写,这是为了避免大小写问题。这里的打印语句单纯是为了测试,后续将被移除。

第二步:请求输入数字,警惕顺序很重要

在第一步下面的单元格中,开始为下一步构建逻辑。这里,我们请求用户输入一对数字并且将这些数字打印出来用于测试:

# step 2: ask for numbers, alert order matters for subtracting and dividing
# 第二步:请求数字,对于减法和除法,警惕顺序很重要
if operation == "subtract" or operation == "divide":
# 如果选择了除法或者减法
    print"You chose { }.".format(operation) )
    print("Please keep in mind that the order of your numbers matter.")
#请注意数字的顺序非常重要
num1 = input("What is the first number? ")
num2 = input("What is the second number? ")
print"First Number: { }".format(num1) ) # for testing purposes
print"Second Number: { }".format(num2) ) # for testing purposes

运行单元格中代码。注意到我们在print语句中提醒用户,如果他们选择减法和除法,数字的顺序很重要。在我们的程序中num1数字总是在运算符的左边,这点非常重要,会导致巨大的差异。Mathematica

注意 如果你收到未定义的报错,请返回上一个单元格

第三步:为数学运算搭建Try/Except

第三步,也是最后一步。是尝试执行运算。在这里搭建try/except模块的原因是我们必须将用户输入转换为浮点型。我们必须预估到他们可能没有输入合适的类型。让我们看看这个单元格如何工作:

# step 3: setup try/except for mathematical operation
# 第三步:为数学运算搭建Try/Except
try:
    # step 3a: immediately try to convert numbers input to floats
    # 3a步:立即将用户输入的数字转换为浮点型
    num1, num2 = float(num1), float(num2)
    # step 3b: perform operation and print result
    # 3b步:执行运算并打印结果
    if operation == "add":
        result = num1 + num2
        print"{ } + { } = { }".format(num1, num2, result) )
    elif operation == "subtract":
        result = num1 - num2
        print"{ } - { } = { }".format(num1, num2, result) )
    elif operation == "multiply":
        result = num1 * num2
        print"{ } * { } = { }".format(num1, num2, result) )
    elif operation == "divide":
        result = num1 / num2
        print"{ } / { } = { }".format(num1, num2, result) )
    else:
    # else will be hit if they didn't chose an option correctly
    # 如果他们没有正确选择选项
        print("Sorry, but '{ }' is not an option.".format(operation) )
except:
# steb 3c: print error   #3c步:打印报错
    print("Error: Improper numbers used. Please try again.")
# 不正确的数字,请重试

运行单元格中代码。这里代码很多所以我们从头开始看,我们设置了try模块并且立即将用户输入转换为浮点型,如果这里出现了错误,except子句将被触发并且输出“出现错误”,而不是中断程序。如果用户输入可以被转换,则设置if/elif/else语句去执行计算并输出正确的结果。如果他们选择了错误的运算,我们就让他们知道。本单元格代码基于之前的2个单元格中代码,如果出现错误,返回之前的单元格检查。

最终输出

我们已经在3个不同的单元格中创建了程序的逻辑,现在可以把它们放进一个单元格中。移除所有测试的打印语句。本质上你可以将三个单元格中的代码粘贴到一个单元格中,结果如下:

# step 1: ask user for calculation to be performed
# 第一步:选择需要执行的计算
operation = input("Would you like to add/subtract/multiply/divide? ").lower( )
# 你要选择加法/减法/乘法/除法
# step 2: ask for numbers, alert order matters for subtracting and dividing
# 第二步:请求数字,对于减法和除法,警惕顺序很重要
if operation == "subtract" or operation == "divide":
# 如果选择了除法或者减法
    print"You chose { }.".format(operation) )
    print("Please keep in mind that the order of your numbers matter.")
#请注意数字的顺序非常重要
num1 = input("What is the first number? ")
num2 = input("What is the second number? ")
# step 3: setup try/except for mathematical operation
# 第三步:为数学运算搭建Try/Except
try:
    # step 3a: immediately try to convert numbers input to floats
    # 3a步:立即将用户输入的数字转换为浮点型
    num1, num2 = float(num1), float(num2)
    # step 3b: perform operation and print result
    # 3b步:执行运算并打印结果
    if operation == "add":
        result = num1 + num2
        print"{ } + { } = { }".format(num1, num2, result) )
    elif operation == "subtract":
        result = num1 - num2
        print"{ } - { } = { }".format(num1, num2, result) )
    elif operation == "multiply":
        result = num1 * num2
        print"{ } * { } = { }".format(num1, num2, result) )
    elif operation == "divide":
        result = num1 / num2
        print"{ } / { } = { }".format(num1, num2, result) )
    else:
        # else will be hit if they didn't chose an option correctly
        # 如果他们没有正确选择选项
        print("Sorry, but '{ }' is not an option.".format(operation) )
except:
# steb 3c: print error   #3c步:打印报错
    print("Error: Improper numbers used. Please try again.")

在单元格中运行如上代码。现在你可以在一个单元格中让程序从头到尾运行。它并不完美,但赋予了我们执行简单计算的能力。和往常一样,试着打破这个程序,改变周围的线条,变成你自己的程序。

恭喜完成了另一个项目。这可能是最简单的计算器,我们已经展示了使用逻辑,获取用户输入并转换和检查错误的能力。

一周总结

我们已经学习了如何与用户交互,可以执行分支语句。这让我们可以使用逻辑构建项目,让项目基于程序中的信息执行特定代码。记住最重要的概念是条件语句和try/except模块。知道捕捉错误和错误导致程序崩溃的区别非常重要。我们要在错误可能会出现在程序中的时候就捕捉它。

下周我们将学习循环以及如何一直反复运行代码直到不想再运行。


浏览 30
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报