可以在一個函式中定義另一個函式_第5周 定義一個函式
阿新 • • 發佈:2021-02-12
技術標籤:可以在一個函式中定義另一個函式
親愛的觀眾老爺們,早上好!
程式設計大師Martin Fowler先生曾經說過:“程式碼有很多種壞味道,重複是最壞的一種!”,要寫出高質量的程式碼首先要解決的就是重複程式碼的問題。
那麼有什麼好的辦法呢?那就是將常用的功能封裝起來!今天就讓我們來學習下,怎麼定義一個自己的封裝函式,然後沒事就呼叫他一下>>>>>>>>!
********神奇的def
函式********
在Python中可以使用def
關鍵字來定義函式,和變數一樣每個函式也有一個響亮的名字,而且命名規則跟變數的命名規則是一致的。在函式名後面的圓括號中可以放置傳遞給函式的引數,這一點和數學上的函式非常相似,程式中函式的引數就相當於是數學上說的函式的自變數,而函式執行完成後我們可以通過return
話不多說,咱們來一起分析一段程式碼:
defjiecheng(num):##定義一個叫“階乘”的函式,輸入自變數是“num”result=1##初始值為1foriinrange(1,num+1):##定義一個迴圈,從1開始,每次加1,一直加到num+1為止result=result*i##把這個數跟result相乘,然後重新賦值給resultreturnresult##輸出result的結果m=int(input('m='))#請使用者輸入一個數字m# 當需要計算階乘的時候不用再寫迴圈求階乘而是直接呼叫已經定義好的函式print(jiecheng(m)) # 呼叫jiecheng函式,算m的階乘數值
仔細閱讀下程式碼的註釋,相信聰明的你已經明白如何定義一個函式以及如何呼叫一個函數了。
********函式的引數********
【有預設值,可以變】
在Python中,函式的引數可以有預設值,也支援使用可變引數,所以Python並不需要像其他語言一樣支援函式的過載,因為我們在定義一個函式的時候可以讓它有多種不同的使用方式,下面是兩個小例子。
##搖骰子fromrandomimportrandint##引入python自帶的隨機數功能defroll_dice(n=2):##定義一個搖骰子的功能,搖n個骰子,預設n=2 total = 0 ##定義初始值為0for_inrange(n):##骰子要一顆一顆的投出來total=total+randint(1,6)##把每個骰子的結果加到result上returntotal##返回result值defadd(a=0,b=0,c=0):##定義一個加法函式,預設三個引數都等於0returna+b+c##返回a+b+c都數值# 如果沒有指定引數那麼使用預設值搖兩顆色子print(roll_dice())##兩個骰子相加print(roll_dice(3))# 搖三顆色子print(add())##因為a/b/c都預設等於0,所以結果是0print(add(1))##因為a=1,b/c都預設等於0,所以結果是1print(add(1,2))##因為a=1,b=2c預設等於0,所以結果是3print(add(1,2,3))##因為a=1,b=2c=3,所以結果是6print(add(c=50,a=100,b=200))#傳遞引數時可以不按照設定的順序進行傳遞,結果是350
********本週小測驗********
【計算求最大公約數和最小公倍數的函式】
條件1:使用者輸入兩個數字x,y
條件2: x,y都是非負整數
要求1: 輸出兩個數字的最大公約數
要求2:輸出兩個數字的最小公倍數
【提示-最大公約數】試錯法:假設計算96和256的最大公約數,可以從設計引數96往下開始每次減一,然後看看96和256,如果兩個數字都能除盡,那麼就是最大公約數了。
【提示-最小公倍數】用x*y/最大公約數,就是他的最小公倍數。
嘗試用程式碼來實現它吧,答案下週公佈!
********上週問題答案********
【100以內的質數】
importmath##匯入python自帶的數學庫fornuminrange(2,100):##把2到100的數字都嘗試一遍is_prime=True#預設這個數是質數 for factor in range(2, int(math.sqrt(num))+ 1):##把因子設定為從2開始到根號下(目前正在測試的數)+1ifnum%factor==0:##如果能整除,那麼這個數就不是質數 is_prime = Falsebreak ##開始算下一個數 ifis_prime == True : print(num, end=' ') ##如果測試完依然是質數,那麼就輸出這個結果
【學會了嗎?本週撒花完結!】