猜数字游戏python程序用函数guesssecret_Python-三、函数
3.1 def語句和參數
def ...(...)語句用于定義一個函數,以便后面調用函數,如:
def hello(name): #定義函數hello,變元name
print('hello' + name) #打印hello+變元name
namein = input() #定義namein變量,從鍵盤取值并賦給namein
hello(namein) #調用hello函數,將namein的變量賦值給變元name。
需注意:函數被調用并返回后,在變元中的值就丟失了。
3.2 返回值和return語句
def語句創建函數時,可以用return語句指定應該返回什么值,如
import random
def getAnswer(answerNumber): #定義一個函數getAnswer,變元answerNumber
if answerNumber == 1:
return 'It is certain' #當變元為1時,打印這個結果,下述同理。
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,調用內建函數random,其范圍是1到9
fortune = getAnswer(r) #運行自建函數getAnswer,變元值為r。
print(fortune) #打印fortune中的存儲結果
3.3 None值
None表示沒有值,是NoneType數據類型的唯一值。
注意,print()函數是沒有返回值的,與none值相同。
可以通過:
spam = print('Hello')
None == spam
#返回結果為True得出。
3.4關鍵字參數和print()
關鍵字是由在調用函數時選用的,通常用于可選變元。
如print中的 end、, 、seq函數。
#end=''
print('Hello',end=' ')
print('World')
結果→→Hello World
# ','
print('Cat','Dog','Mice')
結果→→Cat Dog Mice
# seq = ''
print('Cat','Dog','Mice',sep=',')
結果→→Cat,Dog,Mice
3.5 局部和全局作用域
全局指在本程序中一直生效,局部是指在程序的某一個局部中生效,如果退出局部則失效。
def spam():
eggs = 99 #局部變量1
bacon() #此處局部變量2會被打印,對于spam()來說,這里就是局部
print(eggs) #此處打印結果為99,因為bacon()執行后,bacon()中的局部變量失效了
def bacon():
ham = 101
eggs = 0 #局部變量2
spam()
bacon()
全局變量可以和局部變量重名,但我們盡量讓他們之間不要重名。
***
def spam():
print(eggs)
eggs = 42 #全局變量1
spam()
print(eggs)
上代碼中的局部變量eggs在
打印時引用了全局變量。
總結:全局會被局部引用,局部不會被全局引用,要想運行輕松點,就要注意別重名啦。
3.6 global語句
為函數命名時加上global語句如“global eggs = 1”,就可以讓python知道在這代碼全局中所有的eggs函數都值都為1。
函數中一個人變量要么總是全局變量,要么總是局部變量。
3.7 異常處理
由于你不知道用戶輸入的變元是什么,所以你需要在他們執行前執行一次檢查,以免程序直接出錯跳出。
#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 猜數字游戲
#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 本章習題
1.為什么在程序中加入函數會有好處?
函數快,可以消除重復,讓代碼更短,讀起來也更容易。
2.函數中的代碼何時執行:在函數被定義時,還是在函數被調用時?
在函數被調用時執行。
3.什么語句創建一個函數?
def語句創建函數。
4.一個函數和一次函數調用有什么區別?
函數是一個開頭為def的語句,它包含函數名和函數體。如def guess()
而函數之后的guess()是一次函數調用,只有當代碼執行到guess()時,才會調用函數def guess()下面的函數體。
5.Python 程序中有多少全局作用域?有多少局部作用域?
在調用函數時,創建了一個全局作用域和一個局部作用域。
6.當函數調用返回時,局部作用域中的變量發生了什么?
清空。
7.什么是返回值?返回值可以作為表達式的一部分嗎?
返回值即函數執行結束后的返回結果,他可以作為表達式的一部分。
8.如果函數沒有返回語句,對它調用的返回值是什么?
None
9.如何強制函數中的一個變量指的是全局變量?
global xxx 則 xxx 被強制為一個全局變量。
10.None 的數據類型是什么?
none.type
11.import areallyourpetsnamederic 語句做了什么?
導入了一個名為areallyourpetsnamederic的函數,
12.如果在名為 spam 的模塊中,有一個名為 bacon()的函數,在引入 spam 后,如何調用它?
spam.bacon()
13.如何防止程序在遇到錯誤時崩潰?
try
except
函數進行驗證
14.try 子句中發生了什么?except 子句中發生了什么?
try句子中運行了你的表達式,如果產生錯誤,則轉到except。
之后程序照常運行。
3.11 代碼實踐
3.11.1
編寫一個名為 collatz()的函數,它有一個名為 number 的參數。如果參數是偶數,那么 collatz()就打印出 number // 2,并返回該值。如果 number 是奇數,collatz()就打印并返回 3 * number + 1。
然后編寫一個程序,讓用戶輸入一個整數,并不斷對這個數調用 collatz(),直到函數返回值1(令人驚奇的是,這個序列對于任何整數都有效,利用這個序列,你遲早會得到 1!既使數學家也不能確定為什么。你的程序在研究所謂的“Collatz序列”,它有時候被稱為“最簡單的、不可能的數學問題”)。
記得將 input()的返回值用 int()函數轉成一個整數,否則它會是一個字符串。 提示 如果 number % 2 == 0,整數 number 就是偶數,如果 number % 2 == 1,它就是奇數。
這個程序的輸出看起來應該像這樣:
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 語句,檢測用戶是否輸入了一個非整數的字符串。正常情況下,int()函數在傳入一個非整數字符串時,會產生 ValueError 錯誤,比如 int('puppy')。在 except 子句中,向用戶輸出一條信息,告訴他們必須輸入一個整數。
try:
nm1 = int(input('請輸入一個數字\n'))
except ValueError:
print('請輸入正確的數字!')
else:
print(collatz(nm1))
總結
以上是生活随笔為你收集整理的猜数字游戏python程序用函数guesssecret_Python-三、函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在Windows11和Windows
- 下一篇: python应声虫代码_前端大牛们都学过