Python 入門指南 5.0

exercise1307.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
# 定義計算數列的類別
class NumberSequence:
    # 設定實體屬性
    def __init__(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(n.factorial)
# 印出階乘數列
for i in n.get_factorial(n1):
    print(i)
# 印出計算出的費氏數列
print(n.fibonacci)
# 印出費氏數列
for i in n.get_fibonacci(n1):
    print(i)

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

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