練習(xí) 45 - 你來做一個游戲 - 笨辦法學(xué)Python3

練習(xí) 45. 你來做一個游戲

你要開始學(xué)會自食其力了含衔。通過閱讀這本書股耽,你應(yīng)該已經(jīng)知道颜曾,你需要的所有的信息網(wǎng)上都有泽示,你只要去搜索就能找到缸血。唯一困擾你的就是如何使用正確的詞匯進(jìn)行搜索。學(xué)到現(xiàn)在械筛,你在挑選搜索關(guān)鍵字方面應(yīng)該已經(jīng)有些感覺了∩有海現(xiàn)在是時候嘗試寫一個大項目,并讓它運行起來埋哟。

要求如下:

  1. 創(chuàng)建一個不同于我之前那個的游戲笆豁。

  2. 使用多個文件,并使用 import 來調(diào)用它們赤赊。確保你知道 import 的用法闯狱。

  3. 每個房間使用一個類,并給出符合其用途的類名(比如 GoldRoom砍鸠、KoiPondRoom)扩氢。

  4. 你的執(zhí)行器需要了解這些房間,所以創(chuàng)建一個運行并了解它們的類爷辱。有很多方法可以做到這一點录豺,但是你要考慮如何讓每個房間返回到下一個房間朦肘,或者設(shè)置一個下一個房間是什么的變量。

除此之外双饥,就交給你了媒抠。花一周時間來做這件事咏花,讓它成為你所能做的最好的游戲趴生。使用類、函數(shù)昏翰、字典苍匆、列表,任何你可以使它變得更好的東西棚菊。本課的目的是教你如何在其他文件中構(gòu)造需要其他類的類浸踩。

記住,我不會告訴你具體怎么做统求,因為你必須自己做检碗、去弄清楚。編程就是解決問題的過程码邻,這個過程意味著你要不斷嘗試折剃、試驗、失敗像屋、放棄你之前所做的怕犁,然后再試一次。當(dāng)你遇到困難時己莺,可以向別人尋求幫助因苹,并給他們看你的代碼。如果他們對你很刻薄篇恒,就別理他們扶檐,把注意力放在那些不刻薄并且愿意幫你的人身上。持續(xù)修改和簡化你的代碼胁艰,直到它完整可執(zhí)行為止款筑,然后再研究一下還有沒有可以被改進(jìn)的地方。

祝你好運腾么,一周后再見奈梳。

評估你的游戲

在這個練習(xí)中你會評估你所完成的游戲。也許你只完成了一半解虱,卡在哪里沒有進(jìn)行下去攘须,也許你勉強做出來了。不管怎樣殴泰,我們會串一下你應(yīng)該弄明白的一些東西于宙,并確認(rèn)你的游戲里有使用到這些內(nèi)容浮驳。我們還會學(xué)習(xí)如何用正確的格式構(gòu)建類以及使用類的一些通用習(xí)慣,另外還有很多的“書本知識”讓你學(xué)習(xí)捞魁。

為什么我會讓你先行嘗試至会,然后才告訴你正確的做法呢?因為從現(xiàn)在開始你要學(xué)會“自給自足”谱俭,以前我一直牽著你往前走奉件,以后就得靠你自己了。后面的習(xí)題我只會告訴你你的任務(wù)昆著,你需要自己去完成县貌,在你完成后我再告訴你如何改進(jìn)你的作業(yè)。

一開始你可能會覺得很困難并且很不習(xí)慣凑懂,但是只要你堅持下去窃这,就會培養(yǎng)出自己解決問題的能力。你還會找出創(chuàng)新的方法來解決問題征候,這比從課本中復(fù)制粘貼強多了。

函數(shù)的風(fēng)格

以前我教過的如何寫好函數(shù)的方法同樣適用祟敛,不過這里要再添加幾條:

  • 由于各種各樣的原因疤坝,程序員將類里邊的函數(shù)稱作方法(method)。很大程度上這只是個宣傳策略馆铁。不過每次你把它們稱作“函數(shù)”跑揉,就會有啰嗦的人跳出來糾正你應(yīng)該叫“方法”。你要是覺得他們太煩了埠巨,可以讓他們從數(shù)學(xué)角度演示一下“函數(shù)”和“方法”究竟有什么不同历谍,這樣他們很快就會閉嘴。

  • 在你使用類的過程中辣垒,很大一部分時間是告訴你的類如何“做事情”望侈。給這些函數(shù)命名的時候,與其用函數(shù)的功能來命名函數(shù)勋桶,不如把它當(dāng)作是給類的命令來命名脱衙。就像列表的 pop 函數(shù)一樣,它相當(dāng)于說:“嘿例驹,列表捐韩,把這東西給我 pop 出去【樾猓”它的名字不是 remove_from_end_of_list 荤胁,即使它的功能的確是這樣,這一串字符也不是針對一個列表的命令屎债。

  • 讓你的函數(shù)保持小而簡潔仅政。不知道為什么垢油,有些人開始學(xué)習(xí)類之后 就會忘了這一點。

類的風(fēng)格

? 你的類應(yīng)該使用 “駝峰式大小寫”(camel case)已旧,比如你應(yīng)該用 SuperGoldFactory 而不是 super_gold_factory秸苗。

? 你的 __init__ 函數(shù)不應(yīng)該做太多的事情,這會讓類變得難以使用运褪。

? 你的其它函數(shù)應(yīng)該使用 “下劃線隔詞”(underscore format)惊楼,所以你可以寫 my_awesome_hair,而不是 myawesomehair 或者 MyAwesomeHair 秸讹。

? 用一致的方式組織函數(shù)的參數(shù)檀咙。如果你的類需要處理 users、dogs 和 cats璃诀,就保持這個次序(特別情況除外)弧可。如果一個函數(shù)的參數(shù)是(dog, cat, user),另一個的是(user, cat, dog)劣欢,這會讓函數(shù)使用起來很困難棕诵。

? 盡量不要使用來自模塊或者全局的變量,它們應(yīng)該是相互獨立的凿将。

? 愚蠢地保持一致性是思維狹隘的表現(xiàn)校套。一致性是好事,但是無腦地遵循一些白癡口號是一種很不好的作為牧抵。你應(yīng)該好好為自己著想笛匙。

? 永遠(yuǎn)永遠(yuǎn)都要使用 類名(object) 的方式定義類,否則你會碰到大麻煩犀变。

代碼的風(fēng)格

? 為了以方便他人閱讀妹孙,為自己的代碼字符之間留一些空行。你會看到一些很差的程序員获枝,他們寫的代碼還算通順蠢正,但字符之間沒有任何空行。這種風(fēng)格在任何編程語言中都是壞習(xí)慣省店,因為人的眼睛和大腦會通過空白和垂直對齊的位置來掃描和區(qū)分視覺元素机隙,如果你的代碼里沒有任何空白,這相當(dāng)于為你的代碼刷了一層偽裝涂料萨西。

? 如果一段代碼你無法朗讀出來有鹿,那么這段代碼的可讀性可能就有問題。如果你無法讓一段代碼簡單易用谎脯,試著大聲朗讀出來葱跋。這樣不僅會強迫你放慢速度,真正去仔細(xì)閱讀,還會幫你找到難讀的段落娱俺,從而知道哪些代碼的易讀性需要作出改進(jìn)稍味。

? 學(xué)著模仿別人的風(fēng)格寫 Python 程序,直到有一天你也能找到自己的風(fēng)格荠卷。

? 一旦你有了自己的風(fēng)格模庐,也別把它太當(dāng)回事。程序員工作的一部分就是和別人的代碼打交道油宜,有的人審美就是很差掂碱。相信我,你的審美某一方面一定也很差慎冤,只是你從未意識到而已疼燥。

? 如果你發(fā)現(xiàn)有人寫的代碼風(fēng)格你很喜歡,那就模仿他們的風(fēng)格蚁堤。

好的注釋

? 程序員可能會告訴你醉者,你的代碼需要有足夠的可讀性,所以不用寫注釋披诗。他們會以自己接近官腔的聲音說“所以你永遠(yuǎn)都不應(yīng)該寫注釋或文檔撬即。證明完畢(QED)”。這些程序員要么是做顧問的呈队,如果別人無法使用他們的代碼剥槐,就會付更多錢給他們讓他們解決問題。要么他們能力不足掂咒,從來沒有跟別人合作過。別理會這些人迈喉,好好寫你的注解绍刮。

? 當(dāng)你寫注解的時候,要描述清楚為什么要這樣做以及你在做什么挨摸。代碼只會告訴你“這樣實現(xiàn)”孩革,但是“為什么要這樣實現(xiàn)”更為重要。

? 當(dāng)你為函數(shù)寫文檔注解的時候得运,記得為別的代碼使用者也寫些東西膝蜈。你不需要狂寫一大堆,但一兩句話說明一下這個函數(shù)的用法還是很有用的熔掺。

? 雖然注釋是好東西饱搏,但是太多的注釋就不見得是了。而且注釋也是需要維護(hù)的置逻,所以你要盡量讓注釋簡短切題推沸,如果你對代碼做了更改,記得檢查并更新相關(guān)的注釋,確保它們還是正確的鬓催。

評估你的游戲

現(xiàn)在我要你假裝成是我肺素,板起臉來,把你的代碼打印出來宇驾,然后拿一支紅筆倍靡,把代碼中所有的錯誤都標(biāo)出來,包括你從這個練習(xí)中或者從目前為止你讀到的其他指南中發(fā)現(xiàn)的课舍。等你批改完了塌西,我要求你把所有的錯誤改正過來。這個過程你要多重復(fù)幾次布卡,爭取找到更多可以改進(jìn)的地方雨让。使用我前面教過的方法,把代碼分解成最小的單元忿等,一一進(jìn)行分析栖忠。

這個練習(xí)的目的就是訓(xùn)練你對于細(xì)節(jié)的關(guān)注。等你檢查完自己的代碼贸街,再找一段別人的代碼用這種方法檢查一遍庵寞。把一部分代碼打印出來,檢查出所有關(guān)于代碼和風(fēng)格方面的錯誤薛匪,然后試著在不改壞別人代碼的前提下把它們修改正確捐川。

這周我要求你的事情就是批改和糾錯,包含你自己的代碼和別人的代碼逸尖。這個練習(xí)難度很大古沥,不過一旦你完成了任務(wù),你學(xué)過的東西就會牢牢記在腦中娇跟。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末岩齿,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子苞俘,更是在濱河造成了極大的恐慌盹沈,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吃谣,死亡現(xiàn)場離奇詭異乞封,居然都是意外死亡,警方通過查閱死者的電腦和手機岗憋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進(jìn)店門肃晚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人仔戈,你說我怎么就攤上這事陷揪⊥锱福” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵悍缠,是天一觀的道長卦绣。 經(jīng)常有香客問我,道長飞蚓,這世上最難降的妖魔是什么滤港? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮趴拧,結(jié)果婚禮上溅漾,老公的妹妹穿的比我還像新娘。我一直安慰自己著榴,他們只是感情好添履,可當(dāng)我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著脑又,像睡著了一般暮胧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上问麸,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天往衷,我揣著相機與錄音,去河邊找鬼严卖。 笑死席舍,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的哮笆。 我是一名探鬼主播来颤,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼稠肘!你這毒婦竟也來了福铅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤启具,失蹤者是張志新(化名)和其女友劉穎本讥,沒想到半個月后珊泳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鲁冯,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年色查,在試婚紗的時候發(fā)現(xiàn)自己被綠了薯演。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡秧了,死狀恐怖跨扮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤衡创,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布帝嗡,位于F島的核電站,受9級特大地震影響璃氢,放射性物質(zhì)發(fā)生泄漏哟玷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一一也、第九天 我趴在偏房一處隱蔽的房頂上張望巢寡。 院中可真熱鬧,春花似錦椰苟、人聲如沸抑月。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽售睹。三九已至氢哮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背糠悯。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留荠呐,地道東北人挥吵。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像祭椰,于是被迫代替她去往敵國和親臭家。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容