Python實戰專案:分分鐘教你學習計算自然數n的階乘

前景

Python實戰專案:分分鐘教你學習計算自然數n的階乘

接到一個新的程式設計任務,

要求用Python編寫一個計算自然數n階乘的程式,用於學生利用計算機來計算n的階乘。

階乘:也是數學裡的一種術語;

階乘指從1乘以2乘以3乘以4一直乘到所要求的數;

在表達階乘時,就使用“!”來表示。如h階乘,就表示為h!

Python實戰專案:分分鐘教你學習計算自然數n的階乘

程式需要實現下面這些功能:

程式啟動後,程式在Shell視窗輸出提示資訊“請輸入一個自然數,輸入quit可退出程式:”,學生輸入一個自然數,程式計算自然數的階乘,並將計算結果輸出到Shell視窗。程式再次輸出“請輸入一個自然數:”,等待學生的下次輸入。

程式需要判斷學生輸入的是否是自然數,如果不是自然數,再判斷是否是quit,若是quit退出程式,否則程式輸出錯誤提示“輸入錯誤,請輸入一個自然數或者輸入quit退出程式”。

程式的輸入與輸出:

程式的輸入是自然數n,是整數型別,輸入的來源是學生在程式執行過程中透過程式輸入。程式獲取使用者的輸入可以使用input函式,input函式返回的是字串,如果需要輸入整數,可以使用int函式將字串轉換為整數。

程式的輸出是自然數n階乘的結果,在程式中透過print函式來輸出自然數n階乘的結果

Python實戰專案:分分鐘教你學習計算自然數n的階乘

Python實戰專案:分分鐘教你學習計算自然數n的階乘

Python實戰專案:分分鐘教你學習計算自然數n的階乘

程式流程圖:

Python實戰專案:分分鐘教你學習計算自然數n的階乘

在流程圖中,計算自然數的階乘步驟屬於子過程,後面會給出這個子過程的流程圖。

在流程圖中,當用戶輸入quit時程式退出。在其它情況下,程式要保持執行狀態,等待使用者的輸入。前面已經學習瞭如何讓程式一直保持執行狀態,可以使用while迴圈來保持程式的執行狀態。

Python實戰專案:分分鐘教你學習計算自然數n的階乘

準備使用while迴圈來保持程式的執行狀態,迴圈條件為True,迴圈體為計算自然數階乘的程式碼,在迴圈體中需要判斷學生輸入的是否是quit,如果是quit,呼叫break語句退出迴圈,程式結束。

Python實戰專案:分分鐘教你學習計算自然數n的階乘

還要解決一個問題,就是如何判斷學生輸入的內容是否是自然數。自然數都是由數字組成的,程式只需要判斷學生輸入的內容是否全部是數字就可以,如果全部是數字,再使用int函式將輸入的內容轉換為整數即可。

Python的input函式返回的輸入內容是字串,字串的isdigit方法用於判斷字串內容是否全部是數字,如果字串內容全部是數字返回True,否則返回False。

Python實戰專案:分分鐘教你學習計算自然數n的階乘

最後一個要解決的問題就是如何計算自然數n的階乘。要用程式計算自然數n的階乘,首先要了解自然數n階乘的計算過程,然後再把計算過程用程式來實現。

自然數n的階乘運算是所有小於及等於n的自然數的積。

Python實戰專案:分分鐘教你學習計算自然數n的階乘

準備編寫一個factorial函式來實現自然數n的階乘運算,函式有一個引數n,呼叫factorial函式時,需要傳入引數n。

首先建立一個儲存階乘運算結果的變數result,變數初始值為1,然後使用迴圈範圍為1至n的for迴圈來計算自然數n的階乘,在每輪迴圈中,result都會與迴圈變數相乘並將乘積結果再賦值給result,當for迴圈結束時,result的值就是自然數n階乘的運算結果。

Python實戰專案:分分鐘教你學習計算自然數n的階乘

factorial函式程式碼如下:

Python實戰專案:分分鐘教你學習計算自然數n的階乘

還有一個比較疑惑的問題,就是定義函式的程式碼從哪條語句開始執行?例如下面的程式碼:

Python實戰專案:分分鐘教你學習計算自然數n的階乘

在上面的程式碼中,第1條到第5條語句是函式factorial的函式體程式碼,第6條語句是factorial函式體之後的程式碼。

程式執行後,是先執行factorial函式?還是執行factorial函式體之後的第6條語句呢?

當代碼包含定義的函式時,Python直譯器不會自動執行函式程式碼,只有程式碼中的語句呼叫函式時,Python才會執行函式程式碼。因此上面的程式執行後,會先執行第6條語句,第6條語句呼叫了factorial函式,Python直譯器再執行factorial函式程式碼。

Python實戰專案:分分鐘教你學習計算自然數n的階乘

解決了上面的問題後,開始編寫程式碼。

‘’‘模組檔案:case01。py功能描述:計算自然數n的階乘程式碼編寫時間:2020/04/06作者:程式設計訓練營’‘’# 定義階乘函式factorialdef factorial(n): result = 1 for i in range(1,n+1): result *=i return result# 程式入口if __name__ == ‘__main__’: while(True): # 輸入提示資訊 num = input(“請輸入一個自然數,輸入quit可退出程式:”) # 判斷num是否全部是數字 if num。isdigit(): # 呼叫factorial函式計算num的階乘 print(“%s的階乘為:%d” % (num,factorial(int(num)))) # 判斷num是否等於quit,如果是quit跳出迴圈 elif num == “quit”: break; # 輸出錯誤資訊提示 else: print(“輸入錯誤,請輸入一個自然數或者輸入quit退出程式”)

程式碼解讀

在三個單引號“‘’‘”之間的內容是註釋,如果是多行註釋可以使用三個單引號“’‘’”封閉起來。Python的一個程式碼檔案也稱為一個模組,一般來說Python程式由一個模組或多個模組組成,在模組開始部分需要對該模組進行註釋,註釋的內容主要是模組的檔名稱、功能說明、建立時間、作者等。

factorial是定義的階乘函式,用於計算自然數n的階乘,該函式有一個引數n,呼叫該函式時需要傳入引數n。

語句“if __name__ == ‘__main__’”,用於表示該模組為直接執行模組,也可以說是主模組。前面說過,一個Python程式由一個模組或多個模組組成,在這些模組中,只有一個是主模組,該主模組將被python直譯器直接執行模組中的程式碼,其它模組只有被主模組的程式碼呼叫後才會執行。

__name__是Python系統變數,__name__被賦值為“_main_”,表示該模組是主模組,其它模組可賦值為模組名稱。

為了保持程式的執行狀態,程式碼使用了while迴圈結構,迴圈條件為True,在迴圈體中有跳出迴圈體的語句,如果學生輸入的是“quit”,呼叫break語句退出迴圈。

在迴圈體中,建立num變數儲存學生輸入的內容,input返回的是字串,因此num是字串型別的變數,可以呼叫字串的isdigit方法,來判斷num儲存的內容是否全部是數字,如果是數字,呼叫factorial函式計算num的階乘,並輸出計算結果,否則輸出錯誤資訊提示。

Python實戰專案:分分鐘教你學習計算自然數n的階乘