![Python基础视频教程](https://wfqqreader-1252317822.image.myqcloud.com/cover/276/29126276/b_29126276.jpg)
2.3 语句
前面章节中的示例都是在Python命令行模式下运行的,可以将其看作“你说一句,机器听一句”的互动式交流。在实际编程中,最常用的方式还是直接运行Python文件,逐句逐段地运行代码。
编程语言最常用的3种语句包括顺序语句、分支语句和循环语句。
2.3.1 顺序语句
以打印第一个程序“hello world”为例,在print.py文件中写入以下代码:
![](https://epubservercos.yuewen.com/3BC464/16264452505768106/epubprivate/OEBPS/Images/txt002_19.jpg?sign=1738981303-LLBiA7KFVnDef41IJY95OvR3NqiZMJdF-0-cecc0af7feb7be2bbc29541b2d4e3415)
在PowerShell里运行命令“python print.py”,运行结果如下:
![](https://epubservercos.yuewen.com/3BC464/16264452505768106/epubprivate/OEBPS/Images/txt002_20.jpg?sign=1738981303-AXL1n58FmvCZaIYuRM3PkTp1Z1dVJcZX-0-b558e1f6251a71c37c5524a527676ddf)
通常情况下,代码就是这样从上往下运行的,这也是最常见的默认的顺序语句。
2.3.2 分支语句if和else
在编程的世界中,很多时候逻辑运行是可选择的。遇到不同的条件,会执行不同的逻辑代码。if语句和else语句的作用就是选择不同的运行逻辑。在if.py文件中写入以下代码:
![](https://epubservercos.yuewen.com/3BC464/16264452505768106/epubprivate/OEBPS/Images/txt002_21.jpg?sign=1738981303-Et24DeZdRVe0iX9pnNbDLghT5tPNHYWk-0-84c0e9e3e4b2d482b64073ccfd7cc703)
python if.py的运行结果如下:
![](https://epubservercos.yuewen.com/3BC464/16264452505768106/epubprivate/OEBPS/Images/txt002_22.jpg?sign=1738981303-R6hM08CZw2Ry7DoHvkMQaTTjyKV8Hx1B-0-40e926f5e1b23b4052ec8299100ef68e)
这里并没有把“Now I want to be a good person.”打印出来。这是因为此时before是True,如果把before改成False,再运行一下看看结果:
![](https://epubservercos.yuewen.com/3BC464/16264452505768106/epubprivate/OEBPS/Images/txt002_23.jpg?sign=1738981303-rxODDQNUVxuxxEIT0BEnToQSM3a7IHyX-0-478f2cbbb34d5194591ee85ca268b858)
python if.py的运行结果如下:
![](https://epubservercos.yuewen.com/3BC464/16264452505768106/epubprivate/OEBPS/Images/txt002_24.jpg?sign=1738981303-NlJKXWP2STojel2xQo3E1hvj8iUnbb8S-0-e8c8cc43c5e0bc2b5cc180d97ed18961)
因为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文件中写入以下代码:
![](https://epubservercos.yuewen.com/3BC464/16264452505768106/epubprivate/OEBPS/Images/txt002_25.jpg?sign=1738981303-HLIc3P13dRFVOmX5N3etljcaPabljSHV-0-49b2bedba0b0e78aa0a149d0447a90da)
python girl_friend.py的运行结果如下:
![](https://epubservercos.yuewen.com/3BC464/16264452505768106/epubprivate/OEBPS/Images/txt002_26.jpg?sign=1738981303-soQAAgHDLxCTrliVCvpsojEshpK2dBaC-0-d04c0e90c6e625c49bbf5ef8d9fef848)
可以看到,这里输出了两遍“Give her a lipstick.”。这是因为“she_is_angry”为True,满足了if条件,所以打印了if语句内的“Give her a lipstick”,第二遍的输出则是if后面正常语句的执行结果。从这个例子可以看出,是可以只有“if”而没有“else”的。
逻辑运算是可以由多个条件一起判断的。基础的逻辑运算是“and”运算和“or”运算。在orcs.py文件中写入以下代码:
![](https://epubservercos.yuewen.com/3BC464/16264452505768106/epubprivate/OEBPS/Images/txt002_27.jpg?sign=1738981303-vWoP0kJyyVygJTOI9xZEXD5wlJtG7bjq-0-1cff508a8980a0586172e0e7bc117b99)
python orcs.py的运行结果如下:
![](https://epubservercos.yuewen.com/3BC464/16264452505768106/epubprivate/OEBPS/Images/txt002_28.jpg?sign=1738981303-9zvfF8nEy3hLz3KGgNQT0YvnSX5k7maa-0-b32e7aa7bd735915f49eb0bdd4707601)
如果把这两个条件中的“board”改成False,会有什么样的结果呢?
![](https://epubservercos.yuewen.com/3BC464/16264452505768106/epubprivate/OEBPS/Images/txt002_29.jpg?sign=1738981303-1hnfYc2FpnZ8I7iTBFGaEb2rJrBCnmgF-0-9a6939ade2dcbdc7b42946424c3c2486)
python orcs.py的运行结果如下:
![](https://epubservercos.yuewen.com/3BC464/16264452505768106/epubprivate/OEBPS/Images/txt002_30.jpg?sign=1738981303-mWr4WJMfrBdwikhjUYDVKMO2dGRf9sFz-0-692b18a03d3d5b89f8d2fa3fb9a2c379)
布尔值的“and”运算会判断两边的条件,两边的条件都为True,才会走if中的逻辑。第一次时,“provide_board”和“provide_lodging”都是True,所以会走if中的逻辑。第二次时,“provide_board”成了False,所以不能走if中的逻辑,只能走else中的逻辑。
除了“and”关系外,编程中也有“or”关系:
![](https://epubservercos.yuewen.com/3BC464/16264452505768106/epubprivate/OEBPS/Images/txt002_31.jpg?sign=1738981303-g1WCcZFDGu200It1ljtivsrHaWr16vWf-0-93aef938a40346e6347b2dac21d37c05)
python orcs.py的运行结果如下:
![](https://epubservercos.yuewen.com/3BC464/16264452505768106/epubprivate/OEBPS/Images/txt002_33.jpg?sign=1738981303-JaOKUMhC121snsMKfClhMA2oKS1yeLS2-0-6b6ae729aecee0d3486a78eacb3aa1ef)
在“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,则代码如下:
![](https://epubservercos.yuewen.com/3BC464/16264452505768106/epubprivate/OEBPS/Images/txt002_34.jpg?sign=1738981303-1RKPyGVgxUFOIe0ZUu5sJ6NE6DPh7lqT-0-ba8c9a70fc61b99f08b76f8852b60c8c)
python orcs.py的运行结果如下:
![](https://epubservercos.yuewen.com/3BC464/16264452505768106/epubprivate/OEBPS/Images/txt002_35.jpg?sign=1738981303-QYYgGwwcYoSYO3rrk7i7HfJBzBOgUU46-0-fad52e8372067b66a6face81be58473d)
or两边的值只要有一个为True,整体就为True,所以“provide_board or provide_lodging”还是True,依然会走if中的逻辑。
如果or两边的值都是False,则代码如下:
![](https://epubservercos.yuewen.com/3BC464/16264452505768106/epubprivate/OEBPS/Images/txt002_36.jpg?sign=1738981303-eLAh669zzeZBJmx9HrmGXJg4ctyi6puQ-0-82868fb94a9a718f587c58b618060260)
python orcs.py的运行结果如下:
![](https://epubservercos.yuewen.com/3BC464/16264452505768106/epubprivate/OEBPS/Images/txt002_37.jpg?sign=1738981303-sTdjBlH4yyAsVClooBqC0ROZHKRSdTMR-0-a98fa256cdc6f455d92312d32311404c)
2.3.3 循环语句for
上学时你有没有被罚抄课文的经历?如果罚你print“hello world”100遍,你该怎么办?难道要写100行“print("hello world")”吗?当然,可以写100行“print("hello world")”。不过,这样做既费时又费力。如何解决这一难题呢?我们可以使用循环语句for。
首先,在for.py文件中写入以下代码:
![](https://epubservercos.yuewen.com/3BC464/16264452505768106/epubprivate/OEBPS/Images/txt002_38.jpg?sign=1738981303-4VDLBJN1Ddu8lkVuDnCetx9VSAYrX30T-0-e0b989006a2e9759f4921a4963f45af1)
之后,python for.py的运行结果如下:
![](https://epubservercos.yuewen.com/3BC464/16264452505768106/epubprivate/OEBPS/Images/txt002_39.jpg?sign=1738981303-vLJiEFTmdNLjchkIF9HSPDsv6V9x3DXH-0-745c568e1f580b2f61825742d861aff6)
如果你耐心数的话,会数出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文件中写入以下代码:
![](https://epubservercos.yuewen.com/3BC464/16264452505768106/epubprivate/OEBPS/Images/txt002_40.jpg?sign=1738981303-PN7ggFBw5eufJfkMYc0giJwFlDmUH67Y-0-bc01325162280eb7377dee3bc0ed415f)
python xiaoming.py的运行结果如下:
![](https://epubservercos.yuewen.com/3BC464/16264452505768106/epubprivate/OEBPS/Images/txt002_42.jpg?sign=1738981303-Sys01GBHf2KoQMn9ZEdrjIS6HBwbm3K8-0-6a21ff1f27989867bd7088560d3990c4)
“range(1, 8)”表示从1循环到7(没错,[1, 8)是个左闭、右开的区间。方括号在数学符号里面表示闭区间,圆括号表示开区间。实际在Python中使用的都是圆括号,但是实际区间却是左闭右开的)。可以看到,在i既非2又非4的时候,就会进入if中的代码块,先打印出“女神没空”。运行continue之后,并没有往下显示“吃饭 看电影 送回家”。这是因为continue表示不再往下进行本次循环,而是进入下一轮循环,即开始接下来一天的活动。在这7天中,女神只有星期二和星期四才与小明约会,其他时间输出“女神没空”后就没有后续内容了。
(2)break
有一周是女神的期末考试周,从星期三一直到星期天(即代码中的星期7)都要考试,没有时间约会。女神明确告诉小明,星期三之后就不要再约她了。在xiaoming.py文件中写入以下代码:
![](https://epubservercos.yuewen.com/3BC464/16264452505768106/epubprivate/OEBPS/Images/txt002_43.jpg?sign=1738981303-AnvO7N06RgOR9fkUkEU0ZhOPmwoZZ7hr-0-8a2b73401641421ce9f0a42f3af9d234)
python xiaoming.py的运行结果如下:
![](https://epubservercos.yuewen.com/3BC464/16264452505768106/epubprivate/OEBPS/Images/txt002_44.jpg?sign=1738981303-masnxRr9V0OdLFb70cg94zuwTEEsgIHJ-0-9734cfe63ea4bc8327dd456c956d3aaa)
我们可以看到,星期三之后就没有任何输出了,因为星期三那天进入了“if i >=3:”的逻辑里。女神在推掉约会后直接“break”,跳出整个循环,所以就没有接下来的星期四、星期五、星期六、星期天内容的输出了。
2.3.4 循环语句while
除了循环语句for外,还有一种循环语句while。我们接着以小明和女神的故事为例来讲述while语句。之前说过,女神在考试周的后半周都没理小明,但小明仍坚持不懈地每天约女神。女神觉得小明有点胖(小明现在是150斤),于是对他说:“什么时候你减到140斤,我再和你约会!”小明听到这句话后开始每天减肥(假设他一天只能减一斤),并终于在10天后减到了140斤,约到了女神。
在while.py文件中写入以下代码:
![](https://epubservercos.yuewen.com/3BC464/16264452505768106/epubprivate/OEBPS/Images/txt002_45.jpg?sign=1738981303-3JgznuSAlPKJhAFfcfK86w1tXL32xRvX-0-d0d86f5c7c246f8fa91ab915ccb2899b)
python while.py的运行结果如下:
![](https://epubservercos.yuewen.com/3BC464/16264452505768106/epubprivate/OEBPS/Images/txt002_46.jpg?sign=1738981303-tsDZgXkk71BH8Dc6L9DLTXq0DMjtfcvp-0-529895b776baa91004a87be6e9f5de67)
从这个例子可以看到,while语句的用法是,每次开始循环前,先判断while的条件是否符合。在这个故事中,每次要先判断weight是否大于140,如果大于140,就进到while中进行减肥。直到weight == 140,不再满足weight > 140的条件,才会跳出while循环往下走,和女神约会。