阅读量

原创教程,严禁转载。引用本文,请署名 Python中文网, http://www.zglg.work


Day11: 用户输入和条件

本周我们将介绍Input是如何工作的。这些“decision”被认为是分支语句或者条件。如果思考你人生中的每一天,你将会基于特定条件和未知做出决定,例如早上何时起床,午饭吃什么,什么时候吃等等。这些被称为分支语句。类似的,运用到程序中,就是我们需要电脑做决策。

本章概览

  • 处理用户输入
  • 怎么使用if语句做决策
  • 怎么使用elif语句做多重决策
  • 怎么使用else语句做决策
  • 用决策判断和用户输入构建一个计算器

本周的挑战测试你读代码的能力。阅读如下代码,并思考它是否可以运行。如果你觉得不能运行,我希望你把不能工作的原因记下来,读和写都很重要。

>>> print('{} is my favorite sport'.format(element))
>>> element = 'Football'

在写下你的答案之后,运行这段代码。

如果答案不正确,试着分析错在哪里,答案位于本章的结尾处。

用户输入和类型转换

在今天的课程中,我们会介绍与用户互动的能力和一个被称为类型转换的概念。这对本周结尾处我们要理解如何去构建一个计算器是必不可少的。

跟着今天的课程内容,让我们从 “Python_bootcamp”文件夹中打开Jupyter NoteBook软件。打开软件后,创建一个新文档。重命名为“Week_03”。接着,在第一个单元格中做标记写下标头:”User Input and Type Converting”。我们将在下一个单元格中开始学习。

接收用户输入

在很多我们创建的程序中,你会需要接收用户输入。这样做,我们需要用到input()功能,如同print功能,input会打印括号里面的字符串,它也会创建一个盒子给用户去输入信息。让我们看一个例子:

# accepting and outputting user input
# 接收和输入用户输入
print(input("What is your name? "))

运行这个单元格中的代码,你会注意到在单元格输入什么,单元格就会输出什么,当解释器遇到input功能,它会暂停直到你按下回车键。

注意 程序将输入的信息处理为字符串

存储用户输入

在前一个单元格中,我们简单的打印了用户输入的input数据。然而,为了处理输入的数据,我们需要将它储存成变量:

# 储存用户的输入
ans = input("What is your name? ")
print("Hello {}!".format(ans))

在单元格里运行如上代码。我们非常容易将它存储为一个变量的,将用户输入信息存储在程序中,这样我们可以在任何时候处理输入。

什么是类型转换

Python将一种数据类型直接转换为另一种数据类型,定义为数据转换,这种转换在我们的日常和编程竞赛中非常有用。在某些情形,你处理的数据可能不是正确的数据类型。最显著的例子是用户输入,因为不管用户输入什么数据类型,input接收的都是字符串。如果你期望input接收的是一个数字,你会需要将input接收到的数据转换为整数型数据类型,这样你就可以处理它。

检查类型

在我们温习怎么转换类型前,我要用一个非常重要的功能,那就是python允许我们检查任何变量的类型:

#如何检查变量的数据类型
num = 5
print( type(num) )

在单元格中运行如上代码,输出的将会是””(整数类)。不用担心这里的类部分,我们将会在另一周里学习它。将注意力集中在第二部分,输出类型是一个整数。这就是检查数据类型的运行方式。

转换数据类型

Python给了我们轻松将一种类型转换为另一种的能力,用类型包裹变量。让我们用一个将字符串转换为整数的例子来验证:

# 将变量的数据类型由一种转换为另外一种
num = "9"
num = int(num) # 重新申明”num”并将它储存为整数
print( type(num) ) # 检查num的类型以确保已经完成数据转换

在单元格中运行代码,我们刚刚已经完成从字符串“9”到数字9的转换。现在我们可以在任何计算中使用变量”num”。为了正确地执行转换,我们使用了int()类型转换。无论在单括号里放入哪种数据类型都将转换为1个整数。

表3-1可以查看如何将一种数据类型转换为另一种。

表3-1. 数据类型转换

如你所见,这里有一些数据转换方式,你只需要使用每一种定义数据类型的关键字。布尔型中True转换为整数型是1,是因为True和False的值分别表现为1和0。还有,将浮点行转换为一个整数会取消它的小数,就是小数点右边的数字。

注意 不是所有的数据类型都可以被正确的转换,有一些限制。

转换用户输入

让我们试着处理用户的输入,不管用户输入什么都加上100:

#处理用户输入执行计算
ans = input("Type a number to add: ")
print( type(ans) ) #默认类型为字符串,必须转换
result = 100 + int(ans)
print( "100 + { } = { }".format(ans, result) )

运行如上单元格代码,输入数字9会呈现给我们一个正确的结果。然而,转换不会对单词“nine”生效,因为如同第一次使用print语句中提到的input,默认返回类型是字符串。

处理错误

在上一个单元格中,我们将用户输入转换为整数,然而,要是输入的是一个单词呢?程序会立刻失灵。

作为一个开发者,我们必须预估到用户不会如同我们预期一样输入正确的信息。为了解决这个问题,我们将引入Try and Except模块。Try and Except模块用于捕捉错误。它是先尝试运行Try模块中的代码,如果没有错误产生,那么它将继续运行并且不去运行except模块。

然而,如果有一个错误产生,这时将运行except模块中的代码。这是为了确保你的程序不会因为出现一个错误而停止运行。这是一个常用的处理报错的方法;也有很多其他的方法如有isalpha()功能和isalnum()功能。让我们看一个使用try和except模块的案例:

#使用try和except模块,需要时使用tab键排版
try:
    ans = float( input("Type a number to add: ") )
    print( "100 + { } = { }".format(ans, 100 + ans) )
except:
    print("You did not put in a valid number!")

#当错误出现时如果没有try/except 打印语句不会被命中
print("The program did not break!")

在单元格中运行如上代码,尝试输入不同的答案包括没有数字。你会注意到当你输入的不是数字时,会输出我们的无效打印语句。如果我们代码里没有try和except,这个程序会失灵,并且最后一个打印语句不会出现。

代码块和缩进

在大多数程序语言中,缩排仅仅用于帮助美化代码。在Python中,它用来标示一段代码。让我们看看先前来自“Handling Errors”章节的代码,try语句下面的2行是缩进的,他们被认为是一段代码。这些行代码属于try语句,因为它们在try语句下面直接缩进。

同样道理,在except语句中的那些print语句也是这样。这就是无效代码只会在except模块执行时生效。

所有代码需要连接起来组成语句,你不能随机缩进一个区域。

注意 缩进必须保持一致,它不需要总是保持4个空格。然而,按一次tab键对应4个空格,所以用tab键更容易实现缩进。

练习

  1. 转换:尝试将字符串“True”转换成布尔型,然后输出它的类型以确保正确转换。
  2. 对输入求和:创建2个input语句,请求用户输入2个数字,打印他们的和。
  3. 车辆信息:请求用户输入他们车辆的年龄,制造商,型号和颜色,然后用美观的格式语句打印,例如“2018 Blue Chevrolet Silverado”。

今天非常重要的部分是转换用户输入,如何从一种类型转换为另一种用户类型,以及如何处理报错。

后续章节,正在更新,敬请期待...

上一篇:Day10
下一篇:Day12