Python這個縮進讓我焦頭爛額!最奇葩的縮進...


 
 

例如如下程序。

 
 

運行上面代碼,如果輸入年齡小於20,將會看到如下運行結果。

 
 

從上面代碼可以看出,如果輸入的年齡大於20,則程序會執行整體縮進的代碼塊。

再次重復:Python不是格式自由的語言,因此你不能隨心所欲地縮進,必須按Python語法要求縮進。下面詳細介紹在縮進過程中可能導致的錯誤。

不要忘記縮進

代碼塊一定要縮進,否則就不是代碼塊。例如如下程序。

 
 

上面程序的if條件與下面的print語句位於同一條豎線上,這樣在if條件下就沒有受控制的代碼塊了。因此,上面程序執行時會報出如下錯誤。

 
 

 

注意:if條件后的條件執行體一定要縮進。只有縮進后的代碼才能算條件執行體。

接下來讀者會產生一個疑問:代碼塊(條件執行體)到底要縮進多少呢?這個隨意。你可以縮進1個空格、2個空格、3個空格……或1個Tab位,這都是符合語法要求的。但從編程習慣來看,Python通常建議縮進4個空格。

有些時候,Python解釋器不會報錯,但並不代表程序沒有錯誤。例如如下代碼

 
 

解釋執行上面程序,程序不會報任何錯誤。但如果輸入一個小於20的年齡,則可看到如下運行過程。

 
 

從運行過程可以看出,我們輸入的年齡明明小於20,但運行結果還是會打印“20歲以上……”。這是為什么呢?就是因為這條print語句沒有縮進。如果這行代碼不縮進,那么Python就不會把這行代碼當成條件執行體,它就不受if條件的控制,因此無論用戶輸入什么年齡,print語句總會執行。

如果忘記正確地縮進,很可能導致程序的運行結果超出我們的預期。例如如下程序。

 
 

面代碼中以粗體字標識的代碼行:print("b不大於4")總會執行,因為這行代碼沒有縮進,因此它就不屬於else后的條件執行體,else后的條件執行體只有b - =1這一行代碼。

如果要讓print("b不大於4")語句也處於else控制之下,則需要讓這行代碼也縮進4個空格。

if、else、elif后的條件執行體必須使用相同縮進的代碼塊,將這個代碼塊整體作為條件執行體。當if后有多條語句作為條件執行體時,如果忘記了縮進某一行代碼,則會引起語法錯誤。看下面代碼(程序清單同上)。

 
 

在上面代碼中,因為if后的條件執行體的最后一條語句沒有縮進,所以系統只把c - = 1一行代碼作為條件執行體,當c -= 1語句執行結束后,if語句也就執行結束了。后面的print("c大於4")已經是一行普通代碼,不再屬於條件執行體,從而導致else語句沒有if語句,引發編譯錯誤。在學習中有迷茫不知如何學習的朋友小編推薦一個學Python的學習q u n 227  -435-  450可以來了解一起進步一起學習!免費分享視頻資料

運行上面代碼,將看到如下錯誤。

 
 

為了改正上面的代碼,需要讓print("c大於4")也縮進4個空格。

不要隨意縮進

需要說明的是,雖然Python語法允許代碼塊隨意縮進N個空格,但同一個代碼塊內的代碼必須保持相同的縮進,不能一會縮進2個空格,一會縮進4個空格。

例如如下代碼。

 
 

上面程序中第二條print語句縮進了5個空格,在這樣的情況下,Python解釋器認為這條語句與前一條語句(縮進了4個空格)不是同一個代碼塊(這就是游標卡尺笑話的由來),因此Python解釋器會報錯。運行上面代碼,將會報出如下錯誤。

 
 

把代碼改為如下形式。

 
 

上面程序中第二條print語句只縮進了3個空格,它與前一條print語句(縮進了4個空格)同樣不屬於同一個代碼塊,因此Python解釋器還是會報錯。運行上面代碼,則會報出如下錯誤。

 
 

通過上面介紹可以看出,Python代碼塊中的所有語句必須保持相同的縮進,既不能多,也不能少。

注意:位於同一個代碼塊中的所有語句必須保持相同的縮進,既不能多,也不能少。

另外,需要說明的是,對於不需要使用代碼塊的地方,千萬不要隨意縮進,否則程序也會報錯。例如如下簡單的程序。

 
 

上面程序只有兩條簡單的執行語句,並沒有包括分支、循環等流程控制,因此不應該使用縮進。解釋執行上面代碼,將會看到如下錯誤。

 

  

 



來源:https://www.jianshu.com/p/253fcbfc0fde


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM