個人主頁:黃小黃的博客主頁
️ 支持我: 點贊 收藏 關注
格言:一步一個腳印才能承接所謂的幸運本文來自專欄:Python基礎教程
歡迎點擊支持訂閱專欄 ️
函數即 把具有獨立功能的代碼塊組織成一個小模塊。 可以在開發讓我們在開發程序時 提高編寫效率以及提高代碼的復用率。
這麼說可能體會不到函數的好處,我們來實際體會一下,下面的代碼塊是用於打印乘法口訣表的,當程序運行時,就會打印一次乘法口訣表:
for i in range(1, 10):
for j in range(1, i+1):
print(j, " * ", i, " = ", i*j, end="\t")
print()
如果需要將乘法口訣表打印100次呢? 難道需要將上面的代碼塊寫 100次嗎?答案是否定的,當我們學習了函數過後,只需要像下面那樣定義一個函數,將打印乘法口訣表功能的代碼塊封裝到函數裡面:
def myprint():
for i in range(1, 10):
for j in range(1, i+1):
print(j, " * ", i, " = ", i*j, end="\t")
print()
當需要打印乘法口訣表時,只需要調用定義過的 myprint()
函數即可,下面的代碼就將乘法口訣表打印了6次!!!
myprint()
myprint()
myprint()
myprint()
myprint()
myprint()
怎麼樣?是不是非常簡潔!下面我們開始系統學習函數相關的知識~
函數聲明的基本格式如下:
def 函數名(參數列表):
封裝的代碼
返回值
...
說明:
def
是英文define
的縮寫;標識符的命名規則:(回顧)
在實際開發中,如果希望給函數添加注釋,則應該在 定義函數 下方,使用 連續的三對引號 添加文檔注釋:
在引號中間添加對函數的說明性文字;
在函數調用的位置,使用快捷鍵 CTRL + Q
可以查看函數的說明信息;
在函數定義的上方,應該與其他的代碼及注釋保留兩個空行。
函數的 參數在函數名後的小括號內部填寫, 多個參數見以 ,
分隔。
簡單演示一下求兩數之和的函數,在該函數中有兩個參數,調用該函數則會打印兩數和的結果,每次調用傳入的參數不同,打印的結果不同,使函數更加靈活:
def sum(num1, num2):
result = num1 + num2
print("%d + %d = %d" % (num1, num2, result))
sum(1, 3)
sum(99, 1)
辨析實參與形參
在程序開發中,如果希望 函數在執行結束後返回一個結果,以便調用者進行後續處理, 則需要給函數一個返回值。
return
關鍵字返回結果;return
表示返回,當該語句執行,則後續代碼不會執行。我們對之前的求和函數設計一個返回值,使 sum 返回兩數的和,在外部調用時篩選出和大於5的情況
def sum(num1, num2):
return num1 + num2
for i in range(1, 6):
for j in range(i, 6):
result = sum(i, j)
if result > 5:
print(i, " + ", j, " = ", result)
即在一個函數裡面調用了另外的函數,我們來看下面這段代碼:
def method01():
print("method01")
method02()
print("method01")
def method02():
print("---method02---")
method01()
說明:
斐波那契數列(Fibonacci sequence),又稱黃金分割數列,因數學家萊昂納多·斐波那契(Leonardo Fibonacci)以兔子繁殖為例子而引入,故又稱為“兔子數列”,指的是這樣一個數列:1、1、2、3、5、8、13、21、34、……在數學上,斐波那契數列以如下被以遞推的方法定義:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)
問題: 請你編寫一函數 Fabonacci(n),其中參數 n 代表第 n 次的迭代,來實現求斐波那契第 n 項值的功能。
1️⃣ 方式一:使用遞歸
Tips:如果同學不熟悉遞歸,可以參考下博主的這篇文章:
️深入淺出悟透遞歸️
# 返回斐波那契數列的第 n 項
def fabonacci(n):
if n == 1 or n == 2:
return 1
else:
return fabonacci(n-1) + fabonacci(n-2)
2️⃣ 方式二:使用循環
# 返回斐波那契數列的第 n 項
def fabonacci(n):
if n == 1 or n == 2:
return 1
else:
num1 = 1 # 第一項
num2 = 1 # 第二項
result = 0 # 記錄結果
while n > 2:
result = num1 + num2
num1 = num2
num2 = result
n = n - 1
return result
測試代碼如下,用於打印斐波那契數列的前10項:
# 嘗試打印斐波那契前10項
for i in range(1, 11):
print(fabonacci(i), end=" ")
質數(素數)是指在大於1的自然數中,除了1和它本身以外不再有其他因數的自然數。
問題: 編寫一函數 Prime(n),對於已知正整數 n,判斷該數是否為素數,如果是素數,返回 True,否則返回 False。
分析:只需要循環判斷一個數是否能被除了1和本身外的其他數整除
參考代碼:
# 判斷是否為素數,如果是則返回True
def prime(n):
if n < 2:
return False
i = 2
while i <= n**0.5:
if n % i == 0:
return False
i = i + 1
return True
問題: 利用上題中判斷素數的函數,編寫程序找出 1~100 之間的所有孿生素數(若兩個素數之差為 2,則 這兩個素數就是一對孿生素數) 。例如: 3 和 5、5 和 7、11和 13 等都是孿生素數。
參考代碼:
# 判斷是否為素數,如果是則返回True
def prime(n):
if n < 2:
return False
i = 2
while i <= n**0.5:
if n % i == 0:
return False
i = i + 1
return True
# 測試打印1-100的孿生素數
# 使用枚舉的方式
for i in range(1, 101):
if prime(i) and prime(i + 2):
print(str(i) + "與" + str(i+2), end=" ")
運行結果:
問題: 編寫一函數,將攝氏溫度與華氏溫度互轉。(公式: C*1.8+32=F)
分析:本題涉及到互相轉化問題,即一個函數實現兩種功能,考慮設置兩個參數,一個用於判斷是攝氏度轉華氏度還是華氏度轉攝氏度,一個用於傳入溫度值
參考代碼:
# 華氏度與攝氏度轉化 C*1.8+32=F
def calculate(typeNum, inputnum):
# typeNum 為 1 則為攝氏度轉華氏度
if typeNum == 1:
result = inputnum * 1.8 + 32
print(inputnum, "℃ = ", result, "F")
# typeNum 為 1 則為攝氏度轉華氏度
elif typeNum == 2:
result = (inputnum - 32) / 1.8
print(inputnum, "F = ", result, "℃")
else:
print("輸入有誤")
# 測試
typenum = int(input("請選擇輸入的類型,攝氏度/華氏度(1/2): "))
inputnum = float(input("請輸入溫度值: "))
calculate(typenum, inputnum)
運行結果:
問題: 堆裡有 16 顆豆子,有兩個玩家(假設一個玩家是電腦)每個玩家都可以從堆中的 16 顆豆子中取出 1 顆, 2 顆或者 3 顆豆子。每個玩家在每回合中必須從堆中取出一定數目的豆子。玩家輪流取出豆子,取到最後 一顆豆子的玩家是輸家。 請你編寫程序,模擬豆堆游戲。
思路:寫一個人取豆子的函數 ; 幫電腦設計一個算法,實現取豆子的函數 ; 在主程序中進行輸流調用,誰最後拿到 1 粒豆子誰就輸。
參考代碼:
import random
# 玩家
def people(n):
print("-------------------------------------------")
while True:
pick_people = int(input("你打算取的豆子數: "))
if 1 <= pick_people <= 3:
break
else:
print("每次取出的豆子數應為1——3,請重新輸入!")
continue
print("豆子剩余數量:", n - pick_people)
return n - pick_people
# 電腦
def computer(n):
pick_computer = random.randint(1, 3)
print("電腦玩家取出豆子數:", pick_computer)
print("豆子剩余數量:", n - pick_computer)
return n - pick_computer
def play():
total = 16
print("豆子的總數為:", total)
while True:
total = people(total)
if total <= 0:
print("很抱歉,你輸了")
break
total = computer(total)
if total <= 0:
print("恭喜你,你贏了")
break
# 開始游戲
play()
運行結果:
以上便是本文的全部內容啦,後續內容將會持續免費更新,如果文章對你有所幫助,麻煩動動小手點個贊 + 關注,非常感謝 ️ ️ ️ !
如果有問題,歡迎私信或者評論區!
共勉:“你間歇性的努力和蒙混過日子,都是對之前努力的清零。”