つい数列を求めたくてやった、今は反省している。

import math

def seq_cd(first, difference, start, n):
    """
    初項first、公差differenceの等差数列の第start項目からn項を求めます
    """
    a = first + (start - 1) * difference
    for _ in range(n):
        yield a
        a += difference

def seq_natual(n):
    """
    自然数の数列の最初のn項を求めます
    """
    for i in seq_cd(1, 1, n):
    	yield i

def seq_cr(first, ratio, start, n):
    """
    初項first、公比ratioの等比数列の第start項目からn項を求めます
    """
    a = first * ratio ** (start - 1)
    for _ in range(n):
        yield a
        a *= ratio

# フィボナッチ数列の一般項を求めるのに使用する値
__FIB_PHI = (1 + math.sqrt(5)) / 2

def __fib(n):
    """
    フィボナッチ数列の一般項 F[n] を求めます
    """
    return math.floor(__FIB_PHI ** n / math.sqrt(5) + 0.5)

def seq_fib(start, n):
    """
    フィボナッチ数列(F[t] = F[t-1] + F[t-2])の第start項目からn項を求めます
    """
    f1 = __fib(start)
    f2 = __fib(start + 1)
    for _ in range(n):
        yield f1
        f1, f2 = f2, f1 + f2

# トリボナッチ数列の一般項を求めるのに使用する値
__TRIB_OMEGA = (-1 + math.sqrt(3) * 1j) / 2
__TRIB_CBRT1 = (19 - 3 * math.sqrt(33)) ** (1 / 3)
__TRIB_CBRT2 = (19 + 3 * math.sqrt(33)) ** (1 / 3)
__TRIB_ALPHA = (1 + __TRIB_CBRT1 + __TRIB_CBRT2) / 3
__TRIB_BETA  = (1 + __TRIB_OMEGA * __TRIB_CBRT1 + __TRIB_OMEGA ** 2 * __TRIB_CBRT2) / 3
__TRIB_GAMMA = (1 + __TRIB_OMEGA ** 2 * __TRIB_CBRT1 + __TRIB_OMEGA * __TRIB_CBRT2) / 3

def __trib(n):
    """
    トリボナッチ数列の一般項 T[n] を求めます
    """
    A, B, C = __TRIB_ALPHA, __TRIB_BETA, __TRIB_GAMMA
    a = (B * C - B - C + 2) / ((B - A) * (C - A)) * A ** (n - 2)
    b = (C * A - C - A + 2) / ((C - B) * (A - B)) * B ** (n - 2)
    c = (A * B - A - B + 2) / ((A - C) * (B - C)) * C ** (n - 2)
    return round((a + b + c).real)

def seq_trib(start, n):
    """
    トリボナッチ数列(T[t] = T[t-1] + T[t-2] + T[t-3])の第start項目からn項を求めます
    """
    t1 = __trib(start)
    t2 = __trib(start + 1)
    t3 = __trib(start + 2)
    for _ in range(n):
        yield t1
        t1, t2, t3 = t2, t3, t1 + t2 + t3

def __lucas(n):
    """
    n項目のリュカ数 L[n] を求めます
    """
    return round(__FIB_PHI ** n + (-__FIB_PHI) ** (-n))

def seq_lucas_number(start, n):
    """
    リュカ数によってなる数列の第start項目からn項を求めます
    """
    l1 = __lucas(start)
    l2 = __lucas(start + 1)
    for _ in range(n):
        yield l1
        l1, l2 = l2, l1 + l2