Python基础视频教程
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.3 语句

前面章节中的示例都是在Python命令行模式下运行的,可以将其看作“你说一句,机器听一句”的互动式交流。在实际编程中,最常用的方式还是直接运行Python文件,逐句逐段地运行代码。

编程语言最常用的3种语句包括顺序语句、分支语句和循环语句。

2.3.1 顺序语句

以打印第一个程序“hello world”为例,在print.py文件中写入以下代码:

在PowerShell里运行命令“python print.py”,运行结果如下:

通常情况下,代码就是这样从上往下运行的,这也是最常见的默认的顺序语句。

2.3.2 分支语句if和else

在编程的世界中,很多时候逻辑运行是可选择的。遇到不同的条件,会执行不同的逻辑代码。if语句和else语句的作用就是选择不同的运行逻辑。在if.py文件中写入以下代码:

python if.py的运行结果如下:

这里并没有把“Now I want to be a good person.”打印出来。这是因为此时before是True,如果把before改成False,再运行一下看看结果:

python if.py的运行结果如下:

因为before是False,这个if条件并不成立,所以没有走if下面的分支。

从这个简单的例子可以看出,if是一个分支语句:如果if后面的条件结果是True,则会走if分支;如果不满足条件,则会走else分支。不知道你是否注意到了“if before:”和“print("I didn't have a choice before.")”这两行并没有对齐,“print("I didn't have a choice before.")”这一行开头有几个空格(通常为4个空格)。Python是用缩进来控制代码逻辑块的。同理可知,“print("Now I want to be a good person.")”前面的几个空格也表示这一行在else逻辑块中。有人开玩笑地说:“写Python要买个游标卡尺。”由于缩进是可以嵌套的,因此经常会遇到多层缩进的情况。

可以只有if语句而没有else语句,在girl_friend.py文件中写入以下代码:

python girl_friend.py的运行结果如下:

可以看到,这里输出了两遍“Give her a lipstick.”。这是因为“she_is_angry”为True,满足了if条件,所以打印了if语句内的“Give her a lipstick”,第二遍的输出则是if后面正常语句的执行结果。从这个例子可以看出,是可以只有“if”而没有“else”的。

逻辑运算是可以由多个条件一起判断的。基础的逻辑运算是“and”运算和“or”运算。在orcs.py文件中写入以下代码:

python orcs.py的运行结果如下:

如果把这两个条件中的“board”改成False,会有什么样的结果呢?

python orcs.py的运行结果如下:

布尔值的“and”运算会判断两边的条件,两边的条件都为True,才会走if中的逻辑。第一次时,“provide_board”和“provide_lodging”都是True,所以会走if中的逻辑。第二次时,“provide_board”成了False,所以不能走if中的逻辑,只能走else中的逻辑。

除了“and”关系外,编程中也有“or”关系:

python orcs.py的运行结果如下:

在“provide_board”和“provide_lodging”都为True时,“provide_board or provide_lodging”和“provide_board and provide_lodging”没有什么区别,这是因为“provide_board or provide_lodging”和“provide_board and provide_lodging”的结果都是True。

如果“provide_board”是False,则代码如下:

python orcs.py的运行结果如下:

or两边的值只要有一个为True,整体就为True,所以“provide_board or provide_lodging”还是True,依然会走if中的逻辑。

如果or两边的值都是False,则代码如下:

python orcs.py的运行结果如下:

2.3.3 循环语句for

上学时你有没有被罚抄课文的经历?如果罚你print“hello world”100遍,你该怎么办?难道要写100行“print("hello world")”吗?当然,可以写100行“print("hello world")”。不过,这样做既费时又费力。如何解决这一难题呢?我们可以使用循环语句for。

首先,在for.py文件中写入以下代码:

之后,python for.py的运行结果如下:

如果你耐心数的话,会数出100行“hello world”。for语句下面缩进的代码块“print("hello world")”运行了100次。“for i in range(100):”就是for语句,表示循环100次。若想循环99次,则改为“for i in range(99)”。

continue和break

在循环的过程中,通常会遇到一些条件,一旦满足这些条件就不再继续循环;或者遇到一些条件,就不再运行这次的逻辑,而是继续下一轮的循环。我们以小明邀请女神约会为例来讲解一下for循环中的continue和break。

(1)continue

女神每星期二和星期四有空,其他时间都没空。所以,只有在星期二和星期四女神才会应邀,其他时间约不出来。在xiaoming.py文件中写入以下代码:

python xiaoming.py的运行结果如下:

“range(1, 8)”表示从1循环到7(没错,[1, 8)是个左闭、右开的区间。方括号在数学符号里面表示闭区间,圆括号表示开区间。实际在Python中使用的都是圆括号,但是实际区间却是左闭右开的)。可以看到,在i既非2又非4的时候,就会进入if中的代码块,先打印出“女神没空”。运行continue之后,并没有往下显示“吃饭 看电影 送回家”。这是因为continue表示不再往下进行本次循环,而是进入下一轮循环,即开始接下来一天的活动。在这7天中,女神只有星期二和星期四才与小明约会,其他时间输出“女神没空”后就没有后续内容了。

(2)break

有一周是女神的期末考试周,从星期三一直到星期天(即代码中的星期7)都要考试,没有时间约会。女神明确告诉小明,星期三之后就不要再约她了。在xiaoming.py文件中写入以下代码:

python xiaoming.py的运行结果如下:

我们可以看到,星期三之后就没有任何输出了,因为星期三那天进入了“if i >=3:”的逻辑里。女神在推掉约会后直接“break”,跳出整个循环,所以就没有接下来的星期四、星期五、星期六、星期天内容的输出了。

2.3.4 循环语句while

除了循环语句for外,还有一种循环语句while。我们接着以小明和女神的故事为例来讲述while语句。之前说过,女神在考试周的后半周都没理小明,但小明仍坚持不懈地每天约女神。女神觉得小明有点胖(小明现在是150斤),于是对他说:“什么时候你减到140斤,我再和你约会!”小明听到这句话后开始每天减肥(假设他一天只能减一斤),并终于在10天后减到了140斤,约到了女神。

在while.py文件中写入以下代码:

python while.py的运行结果如下:

从这个例子可以看到,while语句的用法是,每次开始循环前,先判断while的条件是否符合。在这个故事中,每次要先判断weight是否大于140,如果大于140,就进到while中进行减肥。直到weight == 140,不再满足weight > 140的条件,才会跳出while循环往下走,和女神约会。