Python 入門指南 5.0
exercise1407.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 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 | # 定義計算數列的類別 class NumberSequence: # 設定實體屬性 def __init__(self, v1): # 呼叫設定屬性的方法 self.set_value(v1) # 設定實體物件的字串形式 def __str__(self): return str(self.__value1) # 設定實體物件在互動介面的字串形式 def __repr__(self): return "輸入數字是 " + str(self.__value1) + "\n" +\ "階乘 " + str(self.factorial) + "\n" +\ "費式數列數字 " + str(self.fibonacci) # 設定實體物件的格式化字串形式 def __format__(self, s): # 依参數回傳計算結果 if s == "factorial": return str(self.factorial) elif op == "fibonacci": return str(self.fibonacci) else: return "None" # 設定屬性的方法 def set_value(self, v1): # 檢查參數是否為整數 try: # 將參數轉換成整數 v1 = int(v1) # 設定實體屬性 self.__value1 = v1 except ValueError: # 將實體屬性設定為 None self.__value1 = None # 印出錯誤訊息 print("型態錯誤") # 階乘的 getter @property def factorial(self): if self.__value1: # 暫存結果的變數 result = 1 # 計算到 self.__value1 的階乘 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 # 費氏數列的 getter @property 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("階乘: " + format(n, "factorial")) # 檔名: exercise1407.py # 說明:《Python入門指南》的練習 # 網站: http://kaiching.org # 作者: 張凱慶 # 時間: 2023 年 9 月 |