段譽比劍:《誰說不能從武俠學程式》選摘(1)

2022-09-08 05:10

? 人氣

這四行代碼還可以寫得更緊湊一些,去掉= 和== 兩邊的空格:

透過<Google新聞> 追蹤風傳媒

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。

關鍵字:
風傳媒歡迎各界分享發聲,來稿請寄至 opinion@storm.mg

本週最多人贊助文章