0

この質問の単純さをお詫びします。何度も検索しましたが、これまでに尋ねられたことがないほど単純かもしれません。

3000 未満のすべてのフィボナッチ数を出力するフィボナッチ関数を作成しました。

def fibonacci():
    a, b = 0, 1
    while b < 3000:
        a, b = b, a + b
        print a
    return a

最初の n 個のフィボナッチ数を返すようにするにはどうすればよいですか?

また、n番目の値だけを出力するにはどうすればよいですか? たとえば、print [6] は 8 を返します。文字列にしようとしました。

a = str(fibonacci())
print a[6]

しかし、それはうまくいきませんでした。その理由はわかりません。助けてくれてありがとう。

4

4 に答える 4

0

まず、関数は何nを使用するかを知る必要があります。nそれは簡単です -引数としてそれを伝えるだけです:

def fibonacci(n):

最初のフィボナッチ数を返したい場合は、それらのリストnを保持する必要があります。

    numbers = [0, 1] # Start off with the first 2 numbers

次に、フィボナッチ数を以前とほとんど同じ方法で計算します。ただし、 th で停止し、 andnの代わりに最後の 2 つのリスト要素を追加します。ab

    # xrange(2, n) is a sequence going from 2 to n-1
    for i in xrange(2, n):
        # Add together the last two fibonacci numbers and append the result
        # to the list
        numbers.append(numbers[-2] + numbers[-1])

最後に、リストを返します。

    return numbers

最終結果:

def fibonacci(n):
    numbers = [0, 1]
    for i in xrange(2, n):
        numbers.append(numbers[-2] + numbers[-1])
    return numbers

これは、最初のnフィボナッチ数のリストを返します ( の場合n >= 2)。これらの値を処理したいn == 0場合は、特殊なケースが必要です。n == 1

于 2013-07-22T00:04:22.830 に答える
0

これを行うにはいくつかの方法があります。ここにやや賢いものがあります:

まず、 に変更printしてyield、関数が数字を出力する代わりに返すようにします。

def ifibonacci():
    a, b = 0, 1
    while b < 3000:
        a, b = b, a + b
        yield a

次に、使用itertools.isliceして必要な数値を切り出します。

import itertools

print list(itertools.islice(ifibonacci(), 10))
# prints [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

print list(itertools.islice(ifibonacci(), 6, 6+1))
# prints [13] which isn't quite right; see below

関数は最初の 0を出力しないため、インデックスが 1 ずれていることに注意してください。これを修正するには、yield1 行上に移動します。

def ifibonacci():
    a, b = 0, 1
    while b < 3000:
        yield a
        a, b = b, a + b

print list(itertools.islice(ifibonacci(), 6, 6+1))
# prints [8]

(また、これはまだ 3000 より大きい数値を出力しません。修正は演習として残されています)

于 2013-07-22T00:18:03.210 に答える