![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=1738979903-jzxv90mzQnY2EFBhdtX5cUaKqvejQ6QY-0-9c84c813fa67b41eac6018128be0ce33)
在PowerShell里运行命令“python print.py”,运行结果如下:
![](https://epubservercos.yuewen.com/3BC464/16264452505768106/epubprivate/OEBPS/Images/txt002_20.jpg?sign=1738979903-OV1DNgseD4Zv2ScNJ2LMv5r0SnblEkFU-0-826ec6291956fb3d050dbb003f416e7e)
通常情况下,代码就是这样从上往下运行的,这也是最常见的默认的顺序语句。
2.3.2 分支语句if和else
在编程的世界中,很多时候逻辑运行是可选择的。遇到不同的条件,会执行不同的逻辑代码。if语句和else语句的作用就是选择不同的运行逻辑。在if.py文件中写入以下代码:
![](https://epubservercos.yuewen.com/3BC464/16264452505768106/epubprivate/OEBPS/Images/txt002_21.jpg?sign=1738979903-TzUzCBThW4Md5WW2YEGnc8ZyDiJasKCz-0-13421598abefae6ca4567d81b6794978)
python if.py的运行结果如下:
![](https://epubservercos.yuewen.com/3BC464/16264452505768106/epubprivate/OEBPS/Images/txt002_22.jpg?sign=1738979903-AdercxnraLyDJhdePMebe2qjgpqfqCKn-0-f460b814947c798882a9c0f0c506e0d5)
这里并没有把“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=1738979903-2LX7GuzDYPlgwEbuGmNnY1uMkGTbMwLa-0-ce7c7bdcfe8450ad1e764fc450077ea9)
python if.py的运行结果如下:
![](https://epubservercos.yuewen.com/3BC464/16264452505768106/epubprivate/OEBPS/Images/txt002_24.jpg?sign=1738979903-NBNIx2PHZpAoK831cDgncLgafUAYZkgh-0-e839088ffd4ffc7a33f197eba02dfcf6)
因为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=1738979903-smqBE1m19ZwaxqZT3LflvhRxMreH8pUR-0-68c5ebdaa62b7085860d822d09756541)
python girl_friend.py的运行结果如下:
![](https://epubservercos.yuewen.com/3BC464/16264452505768106/epubprivate/OEBPS/Images/txt002_26.jpg?sign=1738979903-QvnhX0SiV9IdkTTyhOQ4Nn5uXkVDLVZj-0-23a749359efdf62a00a002120e0416ce)
可以看到,这里输出了两遍“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=1738979903-DscjIpdvGzNlYg8MpSG93Bj5dPFx7o18-0-1b7cc406a5eccc4de9703058cee52b9b)
python orcs.py的运行结果如下:
![](https://epubservercos.yuewen.com/3BC464/16264452505768106/epubprivate/OEBPS/Images/txt002_28.jpg?sign=1738979903-sSkwlTUJL4RhVgG4QJd4sjaQsTqpXly3-0-77a1e00d09ff799f3134911dcea12b5a)
如果把这两个条件中的“board”改成False,会有什么样的结果呢?
![](https://epubservercos.yuewen.com/3BC464/16264452505768106/epubprivate/OEBPS/Images/txt002_29.jpg?sign=1738979903-Xu6Lo5BGySZcgm3KjBWQwtJ6euYy95hQ-0-41a9cd87a8321de696d8177c8168359c)
python orcs.py的运行结果如下:
![](https://epubservercos.yuewen.com/3BC464/16264452505768106/epubprivate/OEBPS/Images/txt002_30.jpg?sign=1738979903-MO7BG4RSJXkTofp2hoReNyKk0WeOyfLf-0-d06a52c0f3ef92e26fe25204d15366b0)
布尔值的“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=1738979903-zZQWVwXJJbPeyfreZQFxWGWAvQ7gOuRc-0-c68dab61e1a79a67e488a3e5f81af482)
python orcs.py的运行结果如下:
![](https://epubservercos.yuewen.com/3BC464/16264452505768106/epubprivate/OEBPS/Images/txt002_33.jpg?sign=1738979903-gMI3mBg17cv9GY0sGNcNKFL4UnyK1QKx-0-0a69a1c09558f8dbeb57501aae20126f)
在“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=1738979903-8cDAXzXLJI6jqgxy3lhmfIOIaBXLTRen-0-4abfc0f252730f499b399172e89ecd4a)
python orcs.py的运行结果如下:
![](https://epubservercos.yuewen.com/3BC464/16264452505768106/epubprivate/OEBPS/Images/txt002_35.jpg?sign=1738979903-vm8KhLIX5nTDLcsVHKBwieU03rgVRW8r-0-9963e4140754f649616dea84a158fc66)
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=1738979903-rReKtQNckVyksF1IthF4ipIccbcLnfRE-0-f4ac8884160eb243555e14515cd6ab28)
python orcs.py的运行结果如下:
![](https://epubservercos.yuewen.com/3BC464/16264452505768106/epubprivate/OEBPS/Images/txt002_37.jpg?sign=1738979903-7OOueRS183qFgow6iGNq3oiTAinFGUWH-0-6ba6df817f014d1c810e634d8f05ffa5)
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=1738979903-q00gwXSqUWNLTcquRbJvo4oxwYDYMxat-0-e8ef2aca9f73678ff352636519cf8f7d)
之后,python for.py的运行结果如下:
![](https://epubservercos.yuewen.com/3BC464/16264452505768106/epubprivate/OEBPS/Images/txt002_39.jpg?sign=1738979903-6STLuAsa1gVCSgqGQD8cSPxCb6VoaSx0-0-add75ba594231e06a1f6461f48e47513)
如果你耐心数的话,会数出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=1738979903-Y7zNbNZ2kMpu1Y4LhZKKt2OPUYmGKYAO-0-7373b92c16718cea5e4b6d729b827d52)
python xiaoming.py的运行结果如下:
![](https://epubservercos.yuewen.com/3BC464/16264452505768106/epubprivate/OEBPS/Images/txt002_42.jpg?sign=1738979903-dBlsrfN4g0cQ5D35TEmQ5lhnVaIaKq8i-0-365ab0bad541cda42d38bc338797c34e)
“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=1738979903-Cak4e7gUP6I9yohAh8ZFDFXOeQoztpbl-0-639c828fa08b88321da80aac6301f8d1)
python xiaoming.py的运行结果如下:
![](https://epubservercos.yuewen.com/3BC464/16264452505768106/epubprivate/OEBPS/Images/txt002_44.jpg?sign=1738979903-f88iC2euhjlXgz0eMc2An7iVdXfRBGvG-0-7c6a922240cbc717f503a8935e7ff763)
我们可以看到,星期三之后就没有任何输出了,因为星期三那天进入了“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=1738979903-4GIfF024a8oCuUweHF5YZxYEgjR032Va-0-2e1606aec5efe1be393a6f5bcf042a59)
python while.py的运行结果如下:
![](https://epubservercos.yuewen.com/3BC464/16264452505768106/epubprivate/OEBPS/Images/txt002_46.jpg?sign=1738979903-C4O3QcLOp1aYCdlzYeyYlFaYDpkn4vNM-0-8ee62ec36f5d945e654f5fafe7ebae24)
从这个例子可以看到,while语句的用法是,每次开始循环前,先判断while的条件是否符合。在这个故事中,每次要先判断weight是否大于140,如果大于140,就进到while中进行减肥。直到weight == 140,不再满足weight > 140的条件,才会跳出while循环往下走,和女神约会。