前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第三章5: 创建一个计算器

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

作者头像
double
发布2021-03-12 11:17:10
5180
发布2021-03-12 11:17:10
举报
文章被收录于专栏:算法channel

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

周五:创建一个计算器

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

最终设计

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

  1. 请求用户选择他们要执行的计算
  2. 请求用户输入他们要计算的数字
  3. 为数学运算搭建try/except子句
  • a. 将输入数字转换为浮点型
  • b. 执行预算并且输出结果
  • c. 如果触发了异常,打印错误

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

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

代码语言:javascript
复制
# 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

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

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

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

代码语言:javascript
复制
# 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模块的原因是我们必须将用户输入转换为浮点型。我们必须预估到他们可能没有输入合适的类型。让我们看看这个单元格如何工作:

代码语言:javascript
复制
# 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个不同的单元格中创建了程序的逻辑,现在可以把它们放进一个单元格中。移除所有测试的打印语句。本质上你可以将三个单元格中的代码粘贴到一个单元格中,结果如下:

代码语言:javascript
复制
# 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模块。知道捕捉错误和错误导致程序崩溃的区别非常重要。我们要在错误可能会出现在程序中的时候就捕捉它。

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-02-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员郭震zhenguo 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 这是《Python projects for beginners》原书的中文翻译,是我组织几位Python爱好者一起完成的,其中不乏几位在读博士,特别感谢参与翻译的这些小伙伴,你们辛苦了。我正以推文形式,连载出来,欢迎学习。
  • 周五:创建一个计算器
    • 最终设计
      • 第一步:请求用户选择要执行的计算
        • 第二步:请求输入数字,警惕顺序很重要
          • 第三步:为数学运算搭建Try/Except
            • 最终输出
              • 一周总结
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档