Python 入門指南 5.0

exercise1707.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
# 定義計算數列的類別
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

# 使用者輸入
n1 = input("請輸入整數:")
try:
    # 建立類別
    n = NumberSequence(int(n1))
     # 印出物件 n
    print(repr(n))
except ValueError:
    print("輸入錯誤")

# 檔名: exercise1707.py
# 說明:《Python入門指南》的練習
# 網站: http://kaiching.org
# 作者: 張凱慶
# 時間: 2023 年 9 月

回到練習題目
上一頁 exercise1706.py
回 Python 入門指南 5.0 首頁
下一頁 exercise1708.py
回 Python 教材首頁
回程式語言教材首頁