Python-三问畅、函數(shù)

3.1 def語句和參數(shù)

def ...(...)語句用于定義一個函數(shù),以便后面調(diào)用函數(shù)爆存,如:

def hello(name): #定義函數(shù)hello蛉顽,變元name

? ? print('hello' + name) #打印hello+變元name

namein = input() #定義namein變量,從鍵盤取值并賦給namein

hello(namein) #調(diào)用hello函數(shù)先较,將namein的變量賦值給變元name携冤。

需注意:函數(shù)被調(diào)用并返回后,在變元中的值就丟失了拇泣。

3.2 返回值和return語句

def語句創(chuàng)建函數(shù)時噪叙,可以用return語句指定應(yīng)該返回什么值,如

import random

def getAnswer(answerNumber): #定義一個函數(shù)getAnswer霉翔,變元answerNumber

? ? if answerNumber == 1:

? ? ? ? return 'It is certain' #當變元為1時睁蕾,打印這個結(jié)果,下述同理债朵。

? ? elif answerNumber == 2:

? ? ? ? return 'It is decidedly so'

? ? elif answerNumber == 3:

? ? ? ? return 'Yes'

? ? elif answerNumber == 4:

? ? ? ? return 'Reply hazy try again'

? ? elif answerNumber == 5:

? ? ? ? return 'Ask again later'

? ? elif answerNumber == 6:

? ? ? ? return 'Concertrate and ask again'

? ? elif answerNumber == 7:

? ? ? ? return 'My reply is no'

? ? elif answerNumber == 8:

? ? ? ? return 'Outlook not so good'

? ? elif answerNumber == 9:

? ? ? ? return 'Very doubtful'

r = random.randint(1, 9) #定義變量r子眶,調(diào)用內(nèi)建函數(shù)random,其范圍是1到9

fortune = getAnswer(r) #運行自建函數(shù)getAnswer序芦,變元值為r臭杰。

print(fortune) #打印fortune中的存儲結(jié)果

3.3 None值

None表示沒有值,是NoneType數(shù)據(jù)類型的唯一值谚中。

注意渴杆,print()函數(shù)是沒有返回值的,與none值相同宪塔。

可以通過:

spam = print('Hello')

None == spam

#返回結(jié)果為True得出磁奖。

3.4關(guān)鍵字參數(shù)和print()

關(guān)鍵字是由在調(diào)用函數(shù)時選用的,通常用于可選變元某筐。

如print中的 end比搭、, 、seq函數(shù)南誊。

#end=''

print('Hello',end=' ')

print('World')

結(jié)果→→Hello World

# ','

print('Cat','Dog','Mice')

結(jié)果→→Cat Dog Mice

# seq = ''

print('Cat','Dog','Mice',sep=',')

結(jié)果→→Cat,Dog,Mice

3.5 局部和全局作用域

全局指在本程序中一直生效身诺,局部是指在程序的某一個局部中生效蜜托,如果退出局部則失效。

def spam():

? ? eggs = 99 #局部變量1

? ? bacon() #此處局部變量2會被打印霉赡,對于spam()來說橄务,這里就是局部

? ? print(eggs) #此處打印結(jié)果為99,因為bacon()執(zhí)行后同廉,bacon()中的局部變量失效了

def bacon():

? ? ham = 101

? ? eggs = 0 #局部變量2

spam()

bacon()

全局變量可以和局部變量重名仪糖,但我們盡量讓他們之間不要重名柑司。

***

def spam():

? ? print(eggs)

eggs = 42 #全局變量1

spam()

print(eggs)

上代碼中的局部變量eggs在


打印時引用了全局變量迫肖。

總結(jié):全局會被局部引用,局部不會被全局引用攒驰,要想運行輕松點蟆湖,就要注意別重名啦。

3.6 global語句

為函數(shù)命名時加上global語句如“global eggs = 1”玻粪,就可以讓python知道在這代碼全局中所有的eggs函數(shù)都值都為1隅津。

函數(shù)中一個人變量要么總是全局變量,要么總是局部變量劲室。

3.7 異常處理

由于你不知道用戶輸入的變元是什么伦仍,所以你需要在他們執(zhí)行前執(zhí)行一次檢查,以免程序直接出錯跳出很洋。

#CODE

def spam(divideBy):

? ? try:

? ? ? ? return 42 / divideBy

? ? except ZeroDivisionError:

? ? ? ? print('錯誤:無效輸入')

print(spam(2))

print(spam(12))

print(spam(0))

print(spam(1))

#OUTPUT

21.0

3.5

錯誤:無效輸入

None

42.0

3.8 猜數(shù)字游戲


#This is a guess number game.

import random

SecretNumber = random.randint(1,20)

print('I have a number, come on and guess.')

#print('PLZ enter a number.')

#Ask the player to guess 6 times.

for guessesTaken in range(1,7):

? ? print('PLZ enter a number.')

? ? guess = int(input())

? ? if guess < SecretNumber:

? ? ? ? print('Your number is too low.')

? ? elif guess > SecretNumber:

? ? ? ? print('Your number is too high.')

? ? else:

? ? ? ? break # This condition is the correct guess!

if guess == SecretNumber:

? ? print('Good job! You guessed my number in ' + str(guessesTaken) + ' times.')

else:

? ? print('Nope. The number I was thinking of was ' + str(SecretNumber))


3.9 本章習(xí)題

1.為什么在程序中加入函數(shù)會有好處充蓝??

????函數(shù)快,可以消除重復(fù)喉磁,讓代碼更短谓苟,讀起來也更容易。

2.函數(shù)中的代碼何時執(zhí)行:在函數(shù)被定義時协怒,還是在函數(shù)被調(diào)用時涝焙?

????在函數(shù)被調(diào)用時執(zhí)行。

3.什么語句創(chuàng)建一個函數(shù)孕暇?

? ? def語句創(chuàng)建函數(shù)仑撞。

4.一個函數(shù)和一次函數(shù)調(diào)用有什么區(qū)別?

????函數(shù)是一個開頭為def的語句妖滔,它包含函數(shù)名和函數(shù)體隧哮。如def guess()

????而函數(shù)之后的guess()是一次函數(shù)調(diào)用,只有當代碼執(zhí)行到guess()時铛楣,才會調(diào)用函數(shù)def guess()下面的函數(shù)體近迁。

5.Python 程序中有多少全局作用域?有多少局部作用域簸州?

? ? 在調(diào)用函數(shù)時鉴竭,創(chuàng)建了一個全局作用域和一個局部作用域歧譬。

6.當函數(shù)調(diào)用返回時,局部作用域中的變量發(fā)生了什么搏存?

? ? 清空瑰步。

7.什么是返回值?返回值可以作為表達式的一部分嗎璧眠?

? ? 返回值即函數(shù)執(zhí)行結(jié)束后的返回結(jié)果缩焦,他可以作為表達式的一部分。

8.如果函數(shù)沒有返回語句责静,對它調(diào)用的返回值是什么袁滥?

? ? None

9.如何強制函數(shù)中的一個變量指的是全局變量?

? ? global xxx 則 xxx 被強制為一個全局變量灾螃。

10.None 的數(shù)據(jù)類型是什么题翻?

? ? none.type

11.import areallyourpetsnamederic 語句做了什么?

? ? 導(dǎo)入了一個名為areallyourpetsnamederic的函數(shù)腰鬼,

12.如果在名為 spam 的模塊中嵌赠,有一個名為 bacon()的函數(shù),在引入 spam 后熄赡,如何調(diào)用它姜挺?

? ? spam.bacon()

13.如何防止程序在遇到錯誤時崩潰?

? ? try

? ? except

????函數(shù)進行驗證

14.try 子句中發(fā)生了什么彼硫?except 子句中發(fā)生了什么炊豪?

? ? try句子中運行了你的表達式,如果產(chǎn)生錯誤乌助,則轉(zhuǎn)到except溜在。

? ? 之后程序照常運行。

3.11 代碼實踐

3.11.1?

編寫一個名為 collatz()的函數(shù)他托,它有一個名為 number 的參數(shù)掖肋。如果參數(shù)是偶數(shù),那么 collatz()就打印出 number // 2赏参,并返回該值志笼。如果 number 是奇數(shù),collatz()就打印并返回 3 * number + 1把篓。

然后編寫一個程序纫溃,讓用戶輸入一個整數(shù),并不斷對這個數(shù)調(diào)用 collatz()韧掩,直到函數(shù)返回值1(令人驚奇的是紊浩,這個序列對于任何整數(shù)都有效,利用這個序列,你遲早會得到 1坊谁!既使數(shù)學(xué)家也不能確定為什么费彼。你的程序在研究所謂的“Collatz序列”,它有時候被稱為“最簡單的口芍、不可能的數(shù)學(xué)問題”)箍铲。

記得將 input()的返回值用 int()函數(shù)轉(zhuǎn)成一個整數(shù),否則它會是一個字符串鬓椭。 提示 如果 number % 2 == 0颠猴,整數(shù) number 就是偶數(shù),如果 number % 2 == 1小染,它就是奇數(shù)翘瓮。

這個程序的輸出看起來應(yīng)該像這樣:

Enter number:

3

10

5

16

8

4

2

1

def collatz(dd):

? ? global number

? ? number = dd

? ? while number != 1:

? ? ? ? if number % 2 == 0:

? ? ? ? ? ? number = number // 2

? ? ? ? ? ? print(number)

? ? ? ? elif number % 2 == 1:

? ? ? ? ? ? number = number * 3 + 1

? ? ? ? ? ? print(number)


3.11.2

在前面的項目中添加 try 和 except 語句氧映,檢測用戶是否輸入了一個非整數(shù)的字符串春畔。正常情況下,int()函數(shù)在傳入一個非整數(shù)字符串時岛都,會產(chǎn)生 ValueError 錯誤,比如 int('puppy')振峻。在 except 子句中臼疫,向用戶輸出一條信息,告訴他們必須輸入一個整數(shù)扣孟。

try:

? ? nm1 = int(input('請輸入一個數(shù)字\n'))

except ValueError:

? ? print('請輸入正確的數(shù)字烫堤!')

else:

? ? print(collatz(nm1))

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市凤价,隨后出現(xiàn)的幾起案子鸽斟,更是在濱河造成了極大的恐慌,老刑警劉巖利诺,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件富蓄,死亡現(xiàn)場離奇詭異,居然都是意外死亡慢逾,警方通過查閱死者的電腦和手機立倍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來侣滩,“玉大人口注,你說我怎么就攤上這事【椋” “怎么了寝志?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我材部,道長悠菜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任败富,我火速辦了婚禮悔醋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘兽叮。我一直安慰自己芬骄,他們只是感情好,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布鹦聪。 她就那樣靜靜地躺著账阻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪泽本。 梳的紋絲不亂的頭發(fā)上淘太,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天,我揣著相機與錄音规丽,去河邊找鬼蒲牧。 笑死,一個胖子當著我的面吹牛赌莺,可吹牛的內(nèi)容都是我干的冰抢。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼艘狭,長吁一口氣:“原來是場噩夢啊……” “哼挎扰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起巢音,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤遵倦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后官撼,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體梧躺,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年歧寺,在試婚紗的時候發(fā)現(xiàn)自己被綠了燥狰。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡斜筐,死狀恐怖龙致,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情顷链,我是刑警寧澤目代,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響榛了,放射性物質(zhì)發(fā)生泄漏在讶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一霜大、第九天 我趴在偏房一處隱蔽的房頂上張望构哺。 院中可真熱鬧,春花似錦战坤、人聲如沸曙强。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碟嘴。三九已至,卻和暖如春囊卜,著一層夾襖步出監(jiān)牢的瞬間娜扇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工栅组, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留雀瓢,地道東北人。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓笑窜,卻偏偏與公主長得像致燥,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子排截,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354

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