- Python基礎(chǔ)及應(yīng)用
- 呂云翔 姚澤良 張揚(yáng)等編著
- 902字
- 2021-10-27 15:16:28
3.1 選擇結(jié)構(gòu)

在Python中,選擇結(jié)構(gòu)的實(shí)現(xiàn)是通過if語(yǔ)句,if語(yǔ)句的常見語(yǔ)法是:


這表示的是,如果條件1成立就執(zhí)行代碼塊1;如果條件1不成立而條件2成立就執(zhí)行代碼塊2;如果條件1到條件n-1都不滿足,那么就執(zhí)行代碼塊n。
另外,其中的elif和else以及相應(yīng)的代碼塊是可以省略的,也就是說最簡(jiǎn)單的if語(yǔ)句格式是:

要注意的是,這里所有代碼塊前應(yīng)該是4個(gè)空格,原因稍后會(huì)提到,這里先看一段具體的if語(yǔ)句。

很容易得到結(jié)果:

這段代碼表示的含義就是,如果a小于5則輸出' a is smaller than 5.',如果a不小于5而小于6則輸出' a is smaller than 6.',否則就輸出' a is larger than 5.'。這里值得注意的是,雖然a同時(shí)滿足a<5和a<6兩個(gè)條件,但是由于a<5在前面,所以最終輸出為' a is smaller than 5.'。
if語(yǔ)句的語(yǔ)義非常直觀易懂,但是這里還有一個(gè)問題沒有解決,那就是為什么我們要在代碼塊之前空4格?
依舊是先看一個(gè)例子:

運(yùn)行這段代碼可以得到:

但是如果稍加改動(dòng),在print('done')前也加4個(gè)空格:

再運(yùn)行的話什么也不會(huì)輸出。
它們的區(qū)別是什么呢?對(duì)于第一段代碼,print(' done')和if語(yǔ)句是在同一個(gè)代碼塊中的,也就是說無(wú)論if語(yǔ)句的結(jié)果如何,print(' done ')一定會(huì)被執(zhí)行。而在第二段代碼中,print('done')和print('Impossible!')是在同一個(gè)代碼塊中的,也就是說如果if語(yǔ)句中的條件不成立,那么print('Impossible!')和print('done')都不會(huì)被執(zhí)行。
我們稱第二個(gè)例子中這種擁有相同縮進(jìn)的代碼為一個(gè)代碼塊。雖然Python解釋器支持使用任意多但是數(shù)量相同的空格或者制表符來對(duì)齊代碼塊,但是一般約定用4個(gè)空格作為對(duì)齊的基本單位。
另外值得注意的是,在代碼塊中是可以再嵌套另一個(gè)代碼塊的,以if語(yǔ)句的嵌套為例:

首先最外層的代碼塊是所有的代碼,它的縮進(jìn)是0,接著它根據(jù)if語(yǔ)句分成了三個(gè)代碼塊,分別是第5~10行,第12~18行,第20~27行,它們的縮進(jìn)是4,接著在這三個(gè)代碼塊內(nèi)又根據(jù)if語(yǔ)句分成了三個(gè)代碼塊,其中每個(gè)print語(yǔ)句是一個(gè)代碼塊,它們的縮進(jìn)是8。
從這個(gè)例子中可以看到代碼塊是有層級(jí)的,是嵌套的,所以即使這個(gè)例子中所有的print語(yǔ)句擁有相同的空格縮進(jìn),仍然不是同一個(gè)代碼塊。
但是單有順序結(jié)構(gòu)和選擇結(jié)構(gòu)是不夠的,有時(shí)候某些邏輯執(zhí)行的次數(shù)本身就是不確定的或者說邏輯本身具有重復(fù)性,那么這時(shí)候就需要循環(huán)結(jié)構(gòu)了。
- Java逍遙游記
- 計(jì)算機(jī)網(wǎng)絡(luò)
- 玩轉(zhuǎn)Scratch少兒趣味編程
- Java EE框架整合開發(fā)入門到實(shí)戰(zhàn):Spring+Spring MVC+MyBatis(微課版)
- Visual C++串口通信技術(shù)詳解(第2版)
- Object-Oriented JavaScript(Second Edition)
- The Data Visualization Workshop
- Go并發(fā)編程實(shí)戰(zhàn)
- Haskell Data Analysis Cookbook
- Node.js:來一打 C++ 擴(kuò)展
- 學(xué)習(xí)OpenCV 4:基于Python的算法實(shí)戰(zhàn)
- 愛上micro:bit
- Java Hibernate Cookbook
- Implementing Microsoft Dynamics NAV(Third Edition)
- Mastering ASP.NET Core 2.0