這四行代碼還可以寫得更緊湊一些,去掉= 和== 兩邊的空格:
if defense==True:
result=0
else:
result=1
去掉空格後,程式照樣正常運行,但代碼的可讀性差了一點點─ 前面的變數和後面的數值擠到一起,不好看,也不容易識別。所以,在賦值符號= 和比較符號== 兩邊留出空格, 算是一個良好的程式設計習慣。
還記得另一個好習慣嗎?先在直譯器裡編寫代碼,經調試通過,再複製貼上到編輯器裡。
打開Python 直譯器,輸入代碼,注意留出空格,並讓兩個result 設定陳述式保持同樣的縮進狀態:
>>> if defense == True:
result = 0
else:
result = 1
按確認鍵,直譯器竟然以紅字報錯:
Traceback (most recent call last):
File “<pyshell#4>”, line 1, in <module>
if defense == True:
NameError: name ‘defense’ is not defined
為什麼報錯呢?注意看提示:「NameError: name ‘defense’ is not defined」,命名錯誤,名叫「defense」的變數沒有被定義。確實,我們一上來就讓直譯器判斷defense 是否等於True,然而事先沒有給defense 這個布林變數賦值。
怎麼調試呢?當然是先給defense 賦值,再輸入判斷語句:
>>> defense = False
>>> if defense == True:
result = 0
else:
result = 1
這回直譯器裡有了兩個代碼塊,前一個代碼塊defense = False 是賦值語句,具體含義是做出預設,讓段譽放棄見招拆招,只管自己耍劍。
按輸入鍵,直譯器不再報錯,但也有給出任何結果。再檢查一遍代碼,原來判斷語句裡只給result 賦值,卻忘了把賦過值的變數輸出到螢幕上,所以還要補充一行print 代碼:
>>> print(result)
print 本義是「列印」,但做為Python 的常用內置函式, print() 並非將小括號裡的變數傳送給印表機,而是將其輸出到螢幕上。包括在Swift、Perl、VB、R 語言、Groovy、Lua 等程式設計語言中,print 同樣是最常用的螢幕輸出內置函式。而C 語言的螢幕輸出函式是printf,C++ 的螢幕輸出函式是cout。在Linux、Windows 和MacOS 等作業系統的shell 裡面, 輸出函式則是echo。