通过前面关于Python基础的学习,我们了解了一些关于Python的语法、常量和变量、运算符、赋值等等方面的内容。不过截止到现在,在我们所看到的一个个小的Python程序中,总是有一系列语句从上到下精确排列,并交由Python去顺序执行。我们通常把这种类型的程序结构叫做顺序结构。但是我们应该知道,并不是所有的事都会按照想象的那样去一丝不苟的执行。在某些时候,我们总要做出一些抉择,并根据不同的情况决定去完成不同的事情。例如依据每天的时间的不同,然后输出"早上好"、"good morning"或"晚上好"、"good evening"之类的。
这就说明,在我们做程序设计的时候,我们可能需要通过一些方法去控制我们的程序根据条件的不同去完成不同的事,这就是我们今天要学习的两种程序结构类型:选择结构和循环结构。对应的,在Python中有三种控制语句——if、for 和while,其中if语句用来实现选择结构类型的程序,for和while用来实现循环语句类型的程序。
实际上,我们以后编写的所有程序,都不过是顺序、选择和循环三种程序结构的相互嵌套而已。
首先,我们去了解一下if语句是怎么控制程序的呢?
If语句用以检查条件:如果条件为真(True),我们将运行一块语句(称作if-block或if块),否则我们将运行领一块语句(称作else-block或else块)。其中else从句是可选的。
我们还是先来看一个案例,我们先在pycharm中去建立一个先的文件,命名为if.py 。然后输入以下程序代码:
number = 23
guess = int(input("enter an integer: "))
if guess == number:
# if 块从这里开始
print("congratulations, you guessed it.")
print("but you do not win any prizes!")
# if 块从这里结束
elif guess < number:
# elif 块从这里开始
print("no,it is a little higher than that.")
# 实际上,print里面的内容我们想怎么写都是可以的哦
else:
print("no,it is a little lower than that")
# 很明显,我们必须通过猜测一个比number更大的数才能到达这个模块
print("done!")
# 这最后一句语句将在if语句执行完毕后执行。
因为这里if这个条件下来有三种可能性:guess 大于、等于或者小于number。所以我们去运行三次,分别输入三个数来测试以下我们的程序的运行结果。
第一次:
enter an integer: 23
congratulations, you guessed it.
but you do not win any prizes!
done!
第二次:
enter an integer: 50
no,it is a little lower than that
done!
第三次:
enter an integer: 10
no,it is a little higher than that.
done!
我们来分析一下这个程序是如何工作的呢?
在这个程序中,我们根据用户输入的猜测的数字来检查这一数字是否是我们所设置的。我们将变量number设置为任意我们想设置的整数,例如23 。 然后,我们通过input()函数来获取用户的猜测数,并将这个数赋值给变量guess。在这个过程中我们为内置的input()函数提供了一串字符串输出在屏幕上并等待用户输入,使用我们看到了enter an integer:,后面的光标在闪烁,提示我们输入一个整数。一旦我们输入了某些内容并按下键盘上的enter键,input()函数将以字符串的形式返回我们所输入的内容。然而我们需要的是一个数字而不是一个字符串,所以我们在这个地方使用了int函数,它可以将这个字符串转换成一个整数并将其赋值给变量guess。这就是为什么我们要写成guess = int(input("enter an integer: ")),而不是guess = input("enter an integer: ")的原因。
接下来,我们将用户提供的猜测数guess与我们所设置的数number进行比对。如果它们相等,我们就输出一条成功信息。在这里要注意到我们使用缩进级别来告诉Python哪些语句分别属于哪个块。这也是为什么我们前面提过,在Python中缩进是如此的重要。希望所有的学习者和用户都能够坚持"缩进一致"的原则。
另外需要注意的是if语句在结尾处包含一个冒号——Python提过(:号)来指定下面会有一块语句在后头。实际上,在后面的elif、else,甚至for和while这些语句中也都会包含着一个这样的冒号,它的道理是一样的。
然后,如果两个数不相等的话,我们就去检查猜测数是否小于我们的设置数,如果是,我们将告诉用户他们必须猜一个更高一点的数。在这里我们使用的是elif语句,它实际上将两个相连的if else-if else语句合并成一句 if - elif - else语句。这能够使程序更加简便,并且可以减少所需要的缩进量。
我们可以在if块的一个if语句中设置另一个if语句,并可以一直if下去——这被称作嵌套的if语句。也就是我们可能会看到if - elif -elif ...... else这样的程序。
不过我们要记住elif和else部分都是可选的。也就是它们是可以没有的。比如说一个最小规模且有效的if语句可能是这样的:
If True:
Print("yes,it is true")
当Python完整执行了if语句和与其相关的elif和else子句后,它将会移动至包含if语句的代码块的下一句语句中。在前述案例中,也就是猪代码块,其下一句语句就是print("done")语句。在完成这些工作后,Python会发现已运行至程序末尾并宣告工作的完成。
尽管在本文中我们练习的是一个非常简单的程序,但是我们还是应该注意到一些事情,例如缩进、冒号等规则,最开始的时候我们可能会经常忘记去做这些事。但当我们习惯以后,这些规则对我们来说就是"自然而然"的事情了。