習(xí)題 36: 設(shè)計(jì)和調(diào)試
現(xiàn)在你已經(jīng)學(xué)會(huì)了“if 語句”,我將給你一些使用“for 循環(huán)”和“while 循環(huán)”的規(guī)則,一面你日后碰到麻煩。我還會(huì)教你一些調(diào)試的小技巧,以便你能發(fā)現(xiàn)自己程序的問題。最后,你將需要設(shè)計(jì)一個(gè)和上節(jié)類似的小游戲,不過內(nèi)容略有更改。
If 語句的規(guī)則
- 每一個(gè)“if 語句”必須包含一個(gè) else.
- 如果這個(gè) else 永遠(yuǎn)都不應(yīng)該被執(zhí)行到,因?yàn)樗旧頉]有任何意義,那你必須在 else 語句后面使用一個(gè)叫做 die 的函數(shù),讓它打印出錯(cuò)誤信息并且死給你看,這和上一節(jié)的習(xí)題類似,這樣你可以找到很多的錯(cuò)誤。
- “if 語句”的嵌套不要超過 2 層,最好盡量保持只有 1 層。 這意味著如果你在 if 里邊又有了一個(gè) if,那你就需要把第二個(gè) if 移到另一個(gè)函數(shù)里面。
- 將“if 語句”當(dāng)做段落來對(duì)待,其中的每一個(gè) if, elif, else 組合就跟一個(gè)段落的句子組合一樣。在這種組合的最前面和最后面留一個(gè)空行以作區(qū)分。
- 你的布爾測(cè)試應(yīng)該很簡(jiǎn)單,如果它們很復(fù)雜的話,你需要將它們的運(yùn)算事先放到一個(gè)
變量里,并且為變量取一個(gè)好名字。
如果你遵循上面的規(guī)則,你就會(huì)寫出比大部分程序員都好的代碼來。回到上一個(gè)練習(xí)中,看看我有沒有遵循這些規(guī)則,如果沒有的話,就將其改正過來。
Warning
在日常編程中不要成為這些規(guī)則的奴隸。在訓(xùn)練中,你需要通過這些規(guī)則的應(yīng)用來鞏固你學(xué)到的知識(shí),而在實(shí)際編程中這些規(guī)則有時(shí)其實(shí)很蠢。如果你覺得哪個(gè)規(guī)則很蠢,就別使用它。
循環(huán)的規(guī)則
- 只有在循環(huán)永不停止時(shí)使用“while 循環(huán)”,這意味著你可能永遠(yuǎn)都用不到。這條只有 Python 中成立,其他的語言另當(dāng)別論。
- 其他類型的循環(huán)都使用“for 循環(huán)”,尤其是在循環(huán)的對(duì)象數(shù)量固定或者有限的情況下。
調(diào)試(debug)的小技巧
- 不要使用 “debugger”。 Debugger 所作的相當(dāng)于對(duì)病人的全身掃描。你并不會(huì)得到某方面的有用信息,而且你會(huì)發(fā)現(xiàn)它輸出的信息態(tài)度,而且大部分沒有用,或者只會(huì)讓你更困惑。
- 最好的調(diào)試程序的方法是使用 print 在各個(gè)你想要檢查的關(guān)鍵環(huán)節(jié)將關(guān)鍵變量打印出來,從而檢查哪里是否有錯(cuò)。
- 讓程序一部分一部分地運(yùn)行起來。不要等一個(gè)很長(zhǎng)的腳本寫完后才去運(yùn)行它。寫一點(diǎn),運(yùn)行一點(diǎn),再修改一點(diǎn)。
家庭作業(yè)
寫一個(gè)和上節(jié)練習(xí)類似的游戲。同類的任何題材的游戲都可以,花一個(gè)星期讓它盡可能有趣一些。作為加分習(xí)題,你可以盡量多使用列表、函數(shù)、以及模組(記得習(xí)題 13 嗎?),而且盡量多弄一些新的 Python 代碼讓你的游戲跑起來。
不過有一點(diǎn)需要注意,你應(yīng)該把游戲的設(shè)計(jì)先寫出來。在你寫代碼之前,你應(yīng)該設(shè)計(jì)出游戲的地圖,創(chuàng)建出玩家會(huì)碰到的房間、怪物、以及陷阱等環(huán)節(jié)。
一旦搞定了地圖,你就可以寫代碼了。如果你發(fā)現(xiàn)地圖有問題,就調(diào)整一下地圖,讓代碼和地圖互相符合。
最后一個(gè)建議:每一個(gè)程序員在開始一個(gè)新的大項(xiàng)目時(shí),都會(huì)被非理性的恐懼影響到。為了避免這種恐懼,他們會(huì)拖延時(shí)間,到最后一事無成。我有時(shí)會(huì)這樣,每個(gè)人都會(huì)有這樣的經(jīng)歷,避免這種情況的最好的方法是把自己要做的事情列出來,一次完成一樣。
開始做吧。先做一個(gè)小一點(diǎn)的版本,擴(kuò)充它讓它變大,把自己要完成的事情一一列出來,然后逐個(gè)完成就可以了。