官术网_书友最值得收藏!

3.6.2 錯誤檢查:只是開始

到現在為止,我們在例子中還沒有討論過這樣的問題:如果用戶沒有錄入指定的選項之一,那么會發生什么事。我們已經假定用戶將會錄入正確的選項。當正在學習新的概念和語法時,這樣的假定是好的。但是,檢查錯誤(用戶的錯誤和程序運行期間產生的錯誤)是程序設計過程的一個重要組成部分。在例3.10中,如果用戶錄入的數字超出1~10的范圍,那么會發生什么事呢?或者錄入一個字母代替數字?試一試,你將會看到除非錄入數字4、5、6、7、8、9或10,輸出將總是“You gave the site a rating of D.”。這是因為,如果不滿足前3個條件,程序將默認地執行第4種情況。在這種情況下,要修正這個問題,我們可以在語句末尾添加處理在1~10之外的所有情況。檢查錯誤的技術有很多,在繼續學習本書的過程中,你將會學習其中一些技術。例3.11展示了一個函數,其添加的代碼將在錄入有誤時顯示一條錯誤信息。

例3.11 為錯誤使用默認條件

現在,我們就能確定一個無效錄入將不能得到結果D等級。在第4章中,我們將使用循環結構修正這個錯誤。

在繼續討論下一個主題之前,我們將呈現另外一個使用if...else if結構的例子。例3.12展示如何為一個游戲玩家和一個在線對手之間的一場戰斗編寫結局代碼。

例3.12 在一場虛擬戰斗中使用if...else if... 對于這個例子,想象你正在為一個在線冒險游戲編寫代碼。在某個地方,玩家會遇到一個對手,如一個巨人。兩人搏斗后獲勝者由以下規則決定:若玩家獲得的分數超過巨人,則玩家贏;若玩家獲得的分數低于巨人,但是玩家已經在游戲中獲得一把槍或者一把劍,則玩家也贏;若玩家和巨人的分數相同,則戰斗不分勝負。如果玩家不能贏,但有翅膀或者已經獲得飛塵而且飛走,則戰斗也不分勝負。在所有其他情況中,玩家輸。程序已經為巨人賦值50分。為了修飾輸出,這個例子也添加了一些東西。

這個程序有幾個方面值得一些解釋。第11行提示玩家是否有一把槍。順便一提,使用(y/n)作為回答“yes”或“no”的提示是方便的,可以使用戶少一點犯打字錯誤。

只有當玩家的分數少于巨人時,才執行第9~33行上的if子句。如果玩家的分數大于或等于巨人的分數,就執行第34~47行上的else子句以決定是玩家贏還是不分勝負。

然而,如果玩家不能根據分數贏或者不分勝負,那么第9~33行上的if子句決定結果。當玩家沒有槍時,第12行使用一個簡單的if子句提示玩家是否有劍。玩家可能有槍也有劍,這種情況在這個游戲中沒有特殊的意義。只有當玩家沒有槍也沒有劍時,第14行才問玩家是否有翅膀。只有當玩家不能憑借武器嬴而且沒有翅膀時,才執行起始于第16行的if子句。一旦確定玩家不能贏而且不能靠飛走獲得平局,第18~22行就顯示輸的情況。如果玩家不能憑借分數自動嬴或平局而且還沒有輸,那么第23~27行確定玩家憑借持有武器而獲勝,或者沒有武器但憑借持有飛行能力而不分勝負(第28~32行)。

帶有圖像的文本顯示可以使輸出非常有趣。如果你要試一試這個例子,那么這些圖像包含在Student Data Files中。這個例子的初始顯示和3個可能的結果顯示在下面。

主站蜘蛛池模板: 隆回县| 白水县| 西林县| 札达县| 阿合奇县| 新巴尔虎右旗| 若尔盖县| 博爱县| 芜湖县| 乌鲁木齐县| 安阳县| 新巴尔虎左旗| 泽库县| 响水县| 合作市| 六安市| 都江堰市| 金华市| 永顺县| 聂拉木县| 南郑县| 乌拉特中旗| 铜梁县| 乐都县| 渭南市| 修水县| 玉溪市| 闸北区| 庆云县| 安福县| 夏邑县| 灵宝市| 民县| 浦城县| 长寿区| 腾冲县| 玉树县| 华亭县| 拉萨市| 西乡县| 涿州市|