內(nèi)容來源于網(wǎng)絡(luò),本人只是在此稍作整理,如有涉及版權(quán)問題,歸小甲魚官方所有。
練習(xí)題(來自小甲魚官方論壇)
0. 你有聽說過DRY嗎?
答:DRY是程序員們公認(rèn)的指導(dǎo)原則:Don't Repeat Yourself. 特指在程序設(shè)計(jì)以及計(jì)算中避免重復(fù)代碼,因?yàn)檫@樣會(huì)降低靈活性、簡(jiǎn)潔性,并且可能導(dǎo)致代碼之間的矛盾。即不要寫重復(fù)的代碼,而是用“abstraction”類來抽象公有的東西。
1. 都是重復(fù)一段代碼,為什么我要使用函數(shù)(而不使用簡(jiǎn)單的拷貝黏貼)呢?
使用函數(shù)的優(yōu)點(diǎn):
- 可以降低代碼量(調(diào)用函數(shù)只需要一行,而拷貝黏貼需要N倍代碼)
- 可以降低維護(hù)成本(函數(shù)只需修改def部分內(nèi)容,而拷貝黏貼則需要每一處出現(xiàn)的地方都作修改)
- 使序更容易閱讀(沒有人會(huì)希望看到一個(gè)程序重復(fù)一萬行“I love FishC.com”)
2. 函數(shù)可以有多個(gè)參數(shù)嗎?
答:可以的,理論上你想要有多少個(gè)就可以有多少個(gè),只不過如果函數(shù)的參數(shù)過多,在調(diào)用的時(shí)候出錯(cuò)的機(jī)率就會(huì)大大提高,因而寫這個(gè)函數(shù)的程序員也會(huì)被相應(yīng)的問候祖宗,所以,盡量精簡(jiǎn)吧,在Python的世界里,精簡(jiǎn)才是王道!
3. 創(chuàng)建函數(shù)使用什么關(guān)鍵字,要注意什么?
答:使用“def”關(guān)鍵字,要注意函數(shù)名后邊要加上小括號(hào)“()”,然后小括號(hào)后邊是冒號(hào)“:”,然后縮進(jìn)部分均屬于函數(shù)體的內(nèi)容,例如:
1. def MyFun():
2. # 我是函數(shù)體
3. # 我也是函數(shù)體
4. # 我們都屬于函數(shù)MyFun()
5.
6. # 噢,我不屬于MyFun()函數(shù)的了
4. 請(qǐng)問這個(gè)函數(shù)有多少個(gè)參數(shù)?
1. def MyFun((x, y), (a, b)):
2. return x * y - a * b
答:如果你回答兩個(gè),那么恭喜你錯(cuò)啦,答案是0,因?yàn)轭愃朴谶@樣的寫法是錯(cuò)誤的!
我們分析下,函數(shù)的參數(shù)需要的是變量,而這里你試圖用“元祖”的形式來傳遞是不可行的。
我想你如果這么寫,你應(yīng)該是要表達(dá)這么個(gè)意思:
>>> def MyFun(x, y):
return x[0] * x[1] - y[0] * y[1]
>>> MyFun((3, 4), (1, 2))
10
>>>
5. 請(qǐng)問調(diào)用以下這個(gè)函數(shù)會(huì)打印什么內(nèi)容?
def hello():
print('Hello World!')
return
print('Welcome To FishC.com!')
答:因?yàn)楫?dāng)Python執(zhí)行到return語句的時(shí)候,Python認(rèn)為函數(shù)到此結(jié)束,需要返回了(盡管沒有任何返回值)。
>>> hello()
hello world
編程題
0. 編寫一個(gè)函數(shù)power()模擬內(nèi)建函數(shù)pow(),即power(x, y)為計(jì)算并返回x的y次冪的值。
答:
def power(x,y):
result = x**y
return result
print(power(2, 8))
1. 編寫一個(gè)函數(shù),利用歐幾里得算法求最大公約數(shù),例如gcd(x, y)返回值為參數(shù)x和參數(shù)y的最大公約數(shù)。
答:
def gcd(x,y):
while y:
t = x % y
x = y
y = t
return x
print(gcd(18,9))
2. 編寫一個(gè)將十進(jìn)制轉(zhuǎn)換為二進(jìn)制的函數(shù),要求采用“除2取余”的方式,結(jié)果與調(diào)用bin()一樣返回字符串形式。
答:
def DectoBin(num):
temp = []
result = ''
while num:
x = num % 2 # 取余數(shù),當(dāng)做個(gè)位...十位...百位...以此類推
num = num // 2 #取整數(shù)當(dāng)做下一次的被除數(shù)
temp.append(x)
while temp:
result += str(temp.pop())
return result
print(DectoBin(444))
3.請(qǐng)寫下這一節(jié)課你學(xué)習(xí)到的內(nèi)容:格式不限,回憶并復(fù)述是加強(qiáng)記憶的好方式!
- 函數(shù)的定義用def,函數(shù)名后要用冒號(hào)
- 函數(shù)的參數(shù):多個(gè)參數(shù)用逗號(hào)隔開即可,最好寫好注釋,方便他人或自己日后維護(hù)
- 函數(shù)的返回:函數(shù)中使用return