Python 入門指南 5.0
exercise1306.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | # 定義計算數列的類別 class NumberSequence: # 設定實體屬性 def __init__(self, v1): # 檢查參數是否為整數 try: # 將參數轉換成整數 v1 = int(v1) # 設定實體屬性 self.__value1 = v1 except ValueError: # 將實體屬性設定為 None self.__value1 = None # 印出錯誤訊息 print("型態錯誤") # 進行階乘計算 def factorial(self): if self.__value1: # 暫存結果的變數 result = 1 # 計算到 self.value1+1 的階乘 for i in range(1, self.__value1+1): result *= i # 回傳計算結果 return result else: return None # 階乘數列產生器 @classmethod def get_factorial(cls, n): # 檢查參數是否為整數 try: # 將參數轉換成整數 n = int(n) # 暫存結果的變數 result = 1 # 計算到 n+1 的階乘 for i in range(1, n+1): result *= i # 產生計算結果 yield result except ValueError: # 印出錯誤訊息 print("型態錯誤") # 產生 None yield None # 進行費氏數列計算 def fibonacci(self): if self.__value1: # 計算第 self.value1 個費式數列數字 F0 = 0 F1 = 1 result = F0 + F1 # 處理第一個數字 if self.__value1 == 1: # 回傳第一個數字 return result # 處理第二個以後的數字 else: for i in range(2, self.__value1): F0 = F1 F1 = result result = F0 + F1 # 回傳第二個以後的數字 return result else: return None # 費氏數列產生器 @classmethod def get_fibonacci(cls, n): # 檢查參數是否為整數 try: # 將參數轉換成整數 n = int(n) # 計算第 n 個費式數列數字 F0 = 0 F1 = 1 for i in range(1, n+1): # 產生第一個數字 if i == 1: yield F1 # 產生後續數字 else: result = F0 + F1 F0 = F1 F1 = result yield result except ValueError: # 印出錯誤訊息 print("型態錯誤") # 產生 None yield None # 使用者輸入 n1 = input("請輸入整數:") # 建立類別 n = NumberSequence(n1) # 印出計算出的階乘 print(n.factorial()) # 印出階乘數列 for i in n.get_factorial(n1): print(i) # 印出計算出的費氏數列 print(n.fibonacci()) # 印出費氏數列 for i in n.get_fibonacci(n1): print(i) # 檔名: exercise1306.py # 說明:《Python入門指南》的練習 # 網站: http://kaiching.org # 作者: 張凱慶 # 時間: 2023 年 9 月 |