python で フィボナッチ数列の黄金比を計算?

2016年1月8日

def fib_generator():
    a1, a2 = 0, 1

    while True:
        yield a1
        a1, a2 = a1 + a2, a1


def main():
    term_num = 100  # a1=0, a2=1, ..., a{term_num} = X
    fib = fib_generator()
    fiblist = [0, fib.next()]
    for i in xrange(1, term_num+1):
        print "a%d = %d  | a%d/a%d =" % (i, fiblist[1], i, i-1),

        try:
            print fiblist[1]/float(fiblist[0])
        except ZeroDivisionError:
            print "ZeroDivision"

        fiblist[0] = fiblist[1]
        fiblist[1] = fib.next()

if __name__ == "__main__":
    main()

フィボナッチ数列を出して、黄金比を求めたいらしい。pythonのコード書いておきながら、pythonの本すら持っていないのでpythonらしい書き方というのが今だにわからない\(^o^)/

でもメモリのことを対して気にしなくていいのは楽ですね。MemoryErrorの補足をした方がいいのかな…こういう時いつも思うんですが、ゼロ割の時って補足しなくても、整数の比較で間に合う時結構ありますよね。計算量的に整数比較で済ませたほうがいい気がするんですけどどうなんでしょうね…。

pythonって簡単に標準出力を変えられるらしいので、fibonacci.txtに変えて、せっかくなのでテキストにCSVで保存しようかな。

import sys


def fib_generator():
    a1, a2 = 0, 1

    while True:
        yield a1
        a1, a2 = a1 + a2, a1


def main():
    term_num = 100  # a1=0, a2=1, ..., a{term_num} = X
    fib = fib_generator()
    fiblist = [0, fib.next()]
    for i in xrange(1, term_num+1):
        sys.stdout = open("fibonacci.txt", "a")
        print "%d, %d," % (i, fiblist[1]),

        try:
            print fiblist[1]/float(fiblist[0])
        except ZeroDivisionError:
            print "ZeroDivision"

        fiblist[0] = fiblist[1]
        fiblist[1] = fib.next()

if __name__ == "__main__":
    main()

 


PAGE TOP