跳转至

Day15

本文总阅读量次 ,原创教程,严禁转载

Day15:创建一个计算器

上周我们一起构建了一个收据打印程序。结合本周学习的课程,我们去构建一个简单的计算器,它可以接收用户输入并且输出正确结果。 跟着今天的课程,让我们从之前的文件”Week_03”中继续学习,在文件底部新增一个单元格并标注:” Friday Project:Creating a Calculator” 。

最终设计

每周我们都要展示最终设计,本周基于逻辑而不是看起来怎么样。我们会展示构建一个计算器必须的步骤: 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模块。知道捕捉错误和错误导致程序崩溃的区别非常重要。我们要在错误可能会出现在程序中的时候就捕捉它。下周我们将学习循环以及如何一直反复运行代码直到不想再运行。

挑战问题的解答

如果运行了挑战问题的代码,你会发现出现错误。这是因为我们在申明之前就尝试使用”element”变量。如果你调换代码的顺序,程序就可以正常运行。

本周挑战

通过以下挑战测试你的技能: 1. 颠倒数字:改变计算程序让数字的顺序不再重要。这里有几种方法达到同样的结果,一种是询问用户是否愿意颠倒数字的位置。 2. 年龄分组:请求用户输入他们的年龄,基于他们的输入,输出如下分组中的一个: - a. 0到12岁为” Kid” - b. 13到19岁为” Teenager” - c. 13到19岁为” Young Adult” - d. 13到19岁为” Adult” - e. 65岁以上为” Senior” 3. 基于文本的RPG: 这是一个开放式结局的练习。创建一个有故事线同时基于文本的RPG。接收用户输入并且给他们一组选择,然后基于选择,他们可以进入不同的路劲。你可以基于故事的长度使用几个分支语句。

上一篇:Day14
下一篇:Day16