2016-12-14 2 views
0

これは私が持っているものですが、何が問題なのか分かりません。 FibonacciArray [1] = 1行にエラーがあり、 "リスト割り当てインデックスが範囲外です"ということが続きます。助けてください!私は結果を配列に入れようとしています。たとえば、ユーザーが生成するフィボナッチ数の数として4を入力した場合、配列に1 1 2 3を出力します。どのように多くのフィボナッチ数を生成して生成するかをユーザに尋ねるプログラムを書く方法

amount = int(input("How many Fibonacci numbers would you like me to create?:")) 
FibonacciArray = [amount] 
FibonacciArray[0] = 1 #setting first two values of the array to 1 
FibonacciArray[1] = 1 
FibonacciCounter = 2 

if amount == 1: 
    print (FibonacciArray[0]) 
elif amount == 2 or amount > 2: 
    print (FibonacciArray[0]) 
    print (FibonacciArray[1]) 
else: 
    while amount > 0: #or while amount != 0 
     #print out one fibonacci number 
     FibonacciArray[2] = FibonacciArray[0] + FibonacciArray[1] 
     print (FibonacciArray[2]) 
     amount = amount - 1 #decrementing amount 
     FibonacciArray[FibonacciCounter] = FibonacciArray[FibonacciCounter - 2] + FibonacciArray[FibonacciCounter - 1] 
     print (FibonacciArray[FibonacciCounter]) 
     FibonacciCounter = FibonacciCounter + 1 #increment FibonacciCounter 
     amount = amount - 1 #decrement amount again 
     print (FibonacciArray) 
+0

Pythonチュートリアルを読んで、これらの問題などを解決する必要があります。 – BallpointBen

答えて

1

ループに入れた条件に瑕疵があるとは思わないのですか? ループは、amountが1未満の場合にのみ、else部分の3番目の条件にのみ到達します。

if amount == 1: 
    print (FibonacciArray[0]) 
elif amount == 2 or amount > 2: 
    print (FibonacciArray[0]) 
    print (FibonacciArray[1]) 
else: 
    while amount > 0: 
     # Remaining code 

私はあなたの言語にかなり新しいですし、あなたのコードの多くは、冗長または出力のために役に立たないようだと仮定します。

FibonacciArray = [amount] 
FibonacciArray[0] = 1 #setting first two values of the array to 1 
FibonacciArray[1] = 1 

上記の値は、既存のインデックスに値を割り当てることができるため、IndexErrorとなります。リストに新しい要素を追加するために、あなたはappend()メソッドを使用することができますので、

FibonacciArray = [1, 1] 

:あなたがして、これらの3行を置き換えることができます。以下はあなたのコードのpythonicの代替です。

FibonacciArray = [] 
FibonacciArray.append(1) 
FibonacciArray.append(1) 

リストから最後の二つの要素にアクセスするために、あなたは単にnegetiveインデックスを使用することができます。

>>> array = [1, 2, 3, 4, 5] 
>>> array[-1] 
5 
>>> array[-2] 
4 

だから、フィボナッチシリーズの新要素を見つけるために、あなたが行うことができ、

FibonacciArray.append(FibonacciArray[-1] + FibonacciArray[-2]) 
print (FibonacciArray) 

Hereは、作業コードへのリンクです。あなたが助けを必要とする場合は、それを見てください。

+0

私は何のために行くのか達成するために失われています..あなたの助けを楽しみにして – mastermind

+0

@ライアン私は助けて嬉しいです!更新された回答をお読みください。もう一度私たちはあなたに答えを与えるのではなく、ヒントを与えることができます。答えを出すと、あなたの側で新しいことを学ぶという興味がなくなります。だから、一見して助けを求めずに手を差し伸べてください。 :)ディール? – bharadhwaj

0

あなたの配列を作成するときは、このようにそれを設定できます

FibonacciArray = [None] * amount 

これはあなたのエラーとなしに配列値の設定「量」の数を修正します。 あなたのコードにはさらにエラーがあります。 whileループは、else条件が最初に2より大きい任意の数値をキャッチするため、入力された数値が0でない限り呼び出されません。

+0

これを行う最も簡単な方法は何ですか?私はしばらくの間試してきましたが、実際には手がかりがありません – mastermind

+0

https://codeshare.io/2WRwbG – bharadhwaj

1
FibonacciArray = [amount] 

これは、長さがamountの配列を作成しません。これは、値がamountの1つのエントリを持つ配列を作成するだけです。

FibonacciArray = [0]*amount 

第二に、IIRC、else例それはFalseに解決する前にのみ、すべてのifelif文を発生:あなたが探していることは、このようなものです。ここではこの文では:または2に等しい。これは、あなたのelseブロックがを実行しないことが保証さよりも

elif amount == 2 or amount > 2: 

あなたはamountが大きくなければなりませんように指定します。

コードにはもう少し問題がありますが、それは最大の犯罪者です。

amount = int(input("How many Fibonacci numbers would you like me to create?:")) 
if (amount <= 0): 
    print("Amount cannot be less than 1!") 
else: 
    FibonacciArray = [0]*amount 
    FibonacciArray[0] = 1 
    FibonacciCounter = 2 
    if (amount > 1): 
     FibonacciArray[1] = 1 
    if (amount > 2): 
     while FibonacciCounter < amount: 
      FibonacciArray[FibonacciCounter] = FibonacciArray[FibonacciCounter - 2] + FibonacciArray[FibonacciCounter - 1] 
      FibonacciCounter = FibonacciCounter + 1 #increment FibonacciCounter 
    print(FibonacciArray) 

EDITは:負の数のために取り扱いを添加し、私は右ケースamount == 1を処理していないことに気付きました

あなたのコードはより次のようになります。修正しました。

+0

アレックス、コードを全体として与えるのではなく、答えに導く方が良いでしょうか?欲しい? – bharadhwaj

+0

私もそれをしたいと思っていましたが、オリジナルに間違ったものが多すぎると感じました。それが私がするべきことでないなら謝る。これは私の最初の投稿です。 –

+0

問題ありません。私はちょうどFYIを言及した。次の答えを書いている間に、出力を出すのではなく、答えを導くようにしてください。 – bharadhwaj

関連する問題