Python 入門指南 5.0
exercise1807.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 137 138 139 | # 定義計算數列的類別 class NumberSequence: # 設定實體屬性 def __init__(self, v1: int): # 呼叫設定屬性的方法 if not self.set_value(v1): raise ValueError # 設定實體物件的字串形式 def __str__(self) -> str: return str(self.__value1) # 設定實體物件在互動介面的字串形式 def __repr__(self): return "輸入數字是 " + str(self.__value1) + "\n" +\ "階乘 " + str(self.factorial) + "\n" +\ "費式數列數字 " + str(self.fibonacci) # 依據實體屬性回傳真假值 def __bool__(self): if self.__value1: return True else: return False # 設定屬性的方法 def set_value(self, v1: int): # 檢查參數是否為整數 try: # 檢查參數 v1 是否為整數 assert type(v1) is int # 設定實體屬性 self.__value1 = v1 # 回傳 True return True except AssertionError: # 回傳 False return False # 階乘的 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 # 執行部分 if __name__ == "__main__": # 使用者輸入 n1 = input("請輸入整數:") try: # 建立 NumberSequence 的物件 n = NumberSequence(int(n1)) # 印出物件 n print(repr(n)) except ValueError: print("輸入錯誤") # 檔名: exercise1807.py # 說明:《Python入門指南》的練習 # 網站: http://kaiching.org # 作者: 張凱慶 # 時間: 2023 年 10 月 |