網(wǎng)站首頁 編程語言 正文
前言:
前面的一章我們展示了選擇結(jié)構(gòu)的三種基本形式,并給出了實(shí)例演示,但是大家在編寫代碼過程中仍然要注意一些細(xì)節(jié),尤其是代碼塊的縮進(jìn),這對(duì)if else
選擇結(jié)構(gòu)極其重要。
Python 是以縮進(jìn)來標(biāo)記代碼塊的,代碼塊一定要有縮進(jìn),沒有縮進(jìn)的不是代碼塊。另外,同一個(gè)代碼塊的縮進(jìn)量要相同,縮進(jìn)量不同的不屬于同一個(gè)代碼塊。
一、不要忘記縮進(jìn)
if、elif 和 else 后面的代碼塊一定要縮進(jìn),而且縮進(jìn)量要大于 if、elif 和 else 本身。
例如,下面的代碼就是一個(gè)反面教材:
age = int( input("請(qǐng)輸入你的年齡:") ) if age < 18 : print("警告:你還未成年,不能使用該軟件!") else: print("你已經(jīng)成年,可以使用該軟件。")
本例中的print()
函數(shù)和 if、else 語句是對(duì)齊的,在同一條豎線上,都沒有縮進(jìn),所以print()
就不是 if、else 的代碼塊了,這會(huì)導(dǎo)致 Python 解釋器找不到 if、else 的代碼塊,從而報(bào)出如下錯(cuò)誤:
SyntaxError: expected an indented block
翻譯過來就是:
語法錯(cuò)誤:需要一個(gè)縮進(jìn)的代碼塊
總之,if、else 后面的代碼一定要縮進(jìn),否則就不能構(gòu)成 if、else 的執(zhí)行體。
二、縮進(jìn)多少合適?
Python 要求代碼塊必須縮進(jìn),但是卻沒有要求縮進(jìn)量,你可以縮進(jìn) n 個(gè)空格,也可以縮進(jìn) n 個(gè) Tab 鍵的位置。
但是從編程習(xí)慣的角度看,我建議縮進(jìn) 1 個(gè) Tab 鍵的位置,或者縮進(jìn) 4 個(gè)空格;它們兩者其實(shí)是等價(jià)的,很多編輯器都可以將 Tab 鍵設(shè)置為 4 個(gè)空格,比如,IDLE 中默認(rèn) Tab 鍵就是 4 個(gè)空格。
三、所有語句都要縮進(jìn)
一個(gè)代碼塊的所有語句都要縮進(jìn),而且縮進(jìn)量必須相同。如果某個(gè)語句忘記縮進(jìn)了,Python 解釋器并不一定會(huì)報(bào)錯(cuò),但是程序的運(yùn)行邏輯往往會(huì)有問題。
我們一起來看下面的代碼:
age = int( input("請(qǐng)輸入你的年齡:") ) if age < 18 : ? ? print("你還未成年,建議在家人陪同下使用該軟件!") print("未成年人如果得到了家長的同意,請(qǐng)忽略以上提示。") ?#忘記縮進(jìn)
這段代碼并沒有語法錯(cuò)誤,但是它的運(yùn)行邏輯是不對(duì)的,比如,輸入 16 的運(yùn)行結(jié)果如下:
請(qǐng)輸入你的年齡:24↙
未成年人如果得到了家長的同意,請(qǐng)忽略以上提示。
用戶的年齡分明大于 18,但是卻出現(xiàn)了“未成年人”的提示,畫面非常尷尬,這是因?yàn)榈诙€(gè) print()
語句沒有縮進(jìn),if 沒有把它和第一個(gè) print()
語句當(dāng)做同一個(gè)代碼塊,所以它不是 if 執(zhí)行體的一部分。解決這個(gè)錯(cuò)誤也很容易,讓第二個(gè) print()
縮進(jìn) 4 個(gè)空格即可。
四、同一代碼塊縮進(jìn)量要相同
Python 雖然不限制代碼塊的縮進(jìn)量,你可以隨意縮進(jìn) n 個(gè)空格,但是,同一個(gè)代碼塊內(nèi)的所有語句都必須擁有相同的縮進(jìn)量,不能一會(huì)縮進(jìn) 2 個(gè)空格,一會(huì)縮進(jìn) 4 個(gè)空格。
下面的代碼是一個(gè)反面教材:
age = int( input("請(qǐng)輸入你的年齡:") ) if age < 18 : ? ? print("你還未成年,建議在家人陪同下使用該軟件!") ? ? ? print("未成年人如果得到了家長的同意,請(qǐng)忽略以上提示。") ?#縮進(jìn)量不對(duì)
運(yùn)行這段代碼,Python 解釋器會(huì)報(bào)出語法錯(cuò)誤:
SyntaxError: unexpected indent
翻譯過來就是:
語法錯(cuò)誤:意外的縮進(jìn)
這段代碼中,第一個(gè)print()
語句縮進(jìn)了 4 個(gè)空格,第二個(gè) print()
語句縮進(jìn)了 6 個(gè)空格,縮進(jìn)量不同導(dǎo)致它們不是同一個(gè)代碼塊。Python 會(huì)認(rèn)為第一個(gè) print()
語句是 if 的執(zhí)行體,而第二個(gè) print() 是一個(gè)意外的存在,不知道該把它當(dāng)做誰的代碼塊,所以解析失敗,報(bào)錯(cuò)。
總之,位于同一個(gè)代碼塊中的所有語句必須擁有相同的縮進(jìn)量,多一個(gè)空格或者少一個(gè)空格都不行。
五、不要隨便縮進(jìn)
另外需要注意的是,不需要使用代碼塊的地方千萬不要縮進(jìn),一旦縮進(jìn)就會(huì)產(chǎn)生一個(gè)代碼塊。
下面的代碼是一個(gè)反面教材:
info = "AB教程網(wǎng)的地址是:https://www.jb51.net/" ? ? print(info)
這兩條簡單的語句沒有包含分支、循環(huán)、函數(shù)、類等結(jié)構(gòu),不應(yīng)該使用縮進(jìn)。
原文鏈接:https://ruikezhishiyun.blog.csdn.net/article/details/123682974
相關(guān)推薦
- 2022-09-09 python實(shí)現(xiàn)0到1之間的隨機(jī)數(shù)方式_python
- 2023-01-31 C#實(shí)現(xiàn)批量壓縮和解壓縮的示例代碼_C#教程
- 2022-08-05 從List<Map>中截取指定的范圍數(shù)據(jù)集合
- 2022-05-13 C++ std::thread 線程的傳參方式
- 2023-05-12 Python時(shí)間戳轉(zhuǎn)換為字符串與字符串轉(zhuǎn)換為時(shí)間戳_python
- 2022-04-18 C#繪制餅狀圖和柱狀圖的方法_C#教程
- 2022-07-03 C語言由淺入深了解變量的應(yīng)用_C 語言
- 2021-11-22 C++?STL中五個(gè)常用算法使用教程及實(shí)例講解_C 語言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支