數(shù)橙科學(xué)的Python課程包含了極客戰(zhàn)記,想學(xué)習(xí)的同學(xué)可以直接添加數(shù)橙公眾號(hào)咨詢老師。本章森林地牢里的關(guān)卡主要是偏向鍛煉用戶的基本語法結(jié)構(gòu)和計(jì)算機(jī)思維,讓大家熟悉極客戰(zhàn)記的操作與代碼的使用。來到了森林,關(guān)卡將會(huì)變得更多更難,同樣,到了森林,大家就正式開始接觸編程的幾大重要知識(shí)點(diǎn):條件判斷、運(yùn)算符、函數(shù)、對(duì)象屬性。
一、邊地僵局關(guān)卡簡介
邊地僵局(圖1)可以說是被提問次數(shù)最多的關(guān)卡之一,關(guān)卡涉及的編程知識(shí)是條件判斷與函數(shù)的運(yùn)用,其實(shí)難度并不高,本關(guān)的過關(guān)代碼甚至與上一關(guān)一模一樣,但在之前許多同學(xué)常常為了過關(guān)速度,只是填了代碼就走,并沒有理解代碼的作用,導(dǎo)致再遇到一樣的代碼內(nèi)容時(shí)就不懂得如何填寫了。
如果你在這一關(guān)中卡關(guān)了,那么你或許該好好反省一下自己的學(xué)習(xí)方式了:游戲上下文的代碼是否都有認(rèn)真閱讀?填寫完代碼后是否理解各代碼的作用?
二、思路講解
與往常的其他關(guān)卡一樣,本關(guān)也是直接按照注釋(圖2)提示填補(bǔ)代碼即可。根據(jù)第7行注釋提示的if語句,還有第11行的else,我們能夠快速地分析出,這是一段雙分支判斷語句(if-else)。
知識(shí)點(diǎn)在于雙分支判斷語句(if-else),它的代碼格式為(圖3):
if 條件:
代碼語句1
else:
代碼語句2
它是一個(gè)雙分支語句,你可以理解成一個(gè)岔路口,有兩條路供你前行。如果if后的條件滿足,則執(zhí)行if代碼塊下的代碼語句1如果不滿足,則執(zhí)行else代碼塊下的代碼語句2。代碼塊的概念我們上次在講解關(guān)卡“迷失在書庫”時(shí)有講解過。
此時(shí)我們已經(jīng)知道關(guān)卡這里是要我們填寫一個(gè)雙分支語句,那么條件和對(duì)應(yīng)的語句呢?
對(duì)于條件,第7七行的注釋是(圖4):使用isReady語句來檢查“cleave”。isReady是什么?這是我們?cè)陉P(guān)卡“森林劈砍者中”接觸到的新函數(shù):
如果不了解它的使用,你可以在中間的函數(shù)欄中找到它(圖5),點(diǎn)擊查看它的介紹:它的作用是檢查一個(gè)動(dòng)作是否可以使用,在“森林劈砍者”中,它是作為if后的條件來使用的,因?yàn)樗且粋€(gè)有返回值的函數(shù)。
三、什么是返回值
返回值是什么?我來問大家一個(gè)問題,hero.attack(enemy)和hero.findNearestEnemy(),在使用的時(shí)候有什么區(qū)別?hero.attack()函數(shù),括號(hào)內(nèi)必須要有東西,而hero.findNearestEnemy()則不用。
并且hero.attack(),大家明顯可以看到它是一個(gè)動(dòng)作,執(zhí)行完以后英雄會(huì)進(jìn)行攻擊。而hero.findNearestEnemy()使用完以后,似乎什么也沒有發(fā)現(xiàn),且必須這么使用,一定要用在變量的賦值里。
這是因?yàn)樗彩且粋€(gè)有返回值的函數(shù),大家對(duì)它已經(jīng)十分熟悉了,知道它的作用是找到最近的一個(gè)敵人,把它的名字賦入變量之中。它的返回值,就是敵人的名字。因此必須要用一個(gè)變量來承接它的返回值。
hero.isReady()也是如此,它用來檢查一個(gè)動(dòng)作是否可以使用,是否——返回的是布爾型的返回值。布爾型就是:0和1,True和False??雌饋碛悬c(diǎn)難懂,直接翻譯來說,真和假,是和否,就是布爾型。
等于這個(gè)函數(shù)返回的結(jié)果是,檢查的動(dòng)作 可以使用 或 不可以使用。所以可以直接放在if后面,作為條件來使用。當(dāng)然你使用變量來承接也是一樣的。知道了這兩個(gè)知識(shí)點(diǎn)以后,此時(shí)的過關(guān)思路已非常清晰了:編寫一個(gè)雙分支語句,當(dāng)劈斬準(zhǔn)備好了,執(zhí)行劈斬,劈斬沒準(zhǔn)備好,直接攻擊。通關(guān)代碼如圖6。