接到一個新的編程任務,
要求用Python編寫一個計算自然數n階乘的程序,用于學生利用計算機來計算n的階乘。
階乘:也是數學裡的一種術語;
階乘指從1乘以2乘以3乘以4一直乘到所要求的數;
在表達階乘時,就使用“!”來表示。如h階乘,就表示為h!
程序需要實現下面這些功能:
程序啟動後,程序在Shell窗口輸出提示信息“請輸入一個自然數,輸入quit可退出程序:”,學生輸入一個自然數,程序計算自然數的階乘,并将計算結果輸出到Shell窗口。程序再次輸出“請輸入一個自然數:”,等待學生的下次輸入。
程序需要判斷學生輸入的是否是自然數,如果不是自然數,再判斷是否是quit,若是quit退出程序,否則程序輸出錯誤提示“輸入錯誤,請輸入一個自然數或者輸入quit退出程序”。
程序的輸入與輸出:程序的輸入是自然數n,是整數類型,輸入的來源是學生在程序運行過程中通過程序輸入。程序獲取用戶的輸入可以使用input函數,input函數返回的是字符串,如果需要輸入整數,可以使用int函數将字符串轉換為整數。
程序的輸出是自然數n階乘的結果,在程序中通過print函數來輸出自然數n階乘的結果
程序流程圖:
在流程圖中,計算自然數的階乘步驟屬于子過程,後面會給出這個子過程的流程圖。
在流程圖中,當用戶輸入quit時程序退出。在其它情況下,程序要保持運行狀态,等待用戶的輸入。前面已經學習了如何讓程序一直保持運行狀态,可以使用while循環來保持程序的運行狀态。
準備使用while循環來保持程序的運行狀态,循環條件為True,循環體為計算自然數階乘的代碼,在循環體中需要判斷學生輸入的是否是quit,如果是quit,調用break語句退出循環,程序結束。
還要解決一個問題,就是如何判斷學生輸入的内容是否是自然數。自然數都是由數字組成的,程序隻需要判斷學生輸入的内容是否全部是數字就可以,如果全部是數字,再使用int函數将輸入的内容轉換為整數即可。
Python的input函數返回的輸入内容是字符串,字符串的isdigit方法用于判斷字符串内容是否全部是數字,如果字符串内容全部是數字返回True,否則返回False。
最後一個要解決的問題就是如何計算自然數n的階乘。要用程序計算自然數n的階乘,首先要了解自然數n階乘的計算過程,然後再把計算過程用程序來實現。
自然數n的階乘運算是所有小于及等于n的自然數的積。
準備編寫一個factorial函數來實現自然數n的階乘運算,函數有一個參數n,調用factorial函數時,需要傳入參數n。
首先創建一個存儲階乘運算結果的變量result,變量初始值為1,然後使用循環範圍為1至n的for循環來計算自然數n的階乘,在每輪循環中,result都會與循環變量相乘并将乘積結果再賦值給result,當for循環結束時,result的值就是自然數n階乘的運算結果。
factorial函數代碼如下:
還有一個比較疑惑的問題,就是定義函數的代碼從哪條語句開始執行?例如下面的代碼:
在上面的代碼中,第1條到第5條語句是函數factorial的函數體代碼,第6條語句是factorial函數體之後的代碼。
程序運行後,是先執行factorial函數?還是執行factorial函數體之後的第6條語句呢?
當代碼包含定義的函數時,Python解釋器不會自動執行函數代碼,隻有代碼中的語句調用函數時,Python才會執行函數代碼。因此上面的程序運行後,會先執行第6條語句,第6條語句調用了factorial函數,Python解釋器再執行factorial函數代碼。
解決了上面的問題後,開始編寫代碼。
'''
模塊文件:case01.py
功能描述:計算自然數n的階乘
代碼編寫時間:2020/04/06
作者:編程訓練營
'''
# 定義階乘函數factorial
def 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的階乘,并輸出計算結果,否則輸出錯誤信息提示。
,
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!