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
注意 如果你收到未定义的报错,请返回上一个单元格
第三步:为数学运算搭建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.")
# 不正确的数字,请重试
最终输出
我们已经在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。接收用户输入并且给他们一组选择,然后基于选择,他们可以进入不同的路劲。你可以基于故事的长度使用几个分支语句。