2016-06-19 6 views
2

このプログラムは、3と5で割り切れるすべての数値を取り、それらをまとめて加算することになっていますが、このスクリプトを実行しようとするとわかりません。私にエラーを与え続け:IndexError:リストの索引が範囲外にある

Traceback (most recent call last): 
File "first.py", line 23, in <module> 
main() 
File "first.py", line 19, in main 
merica = merica + good[count-1] 
IndexError: list index out of range 

count-1 

はそれが正しいと思われるインデックスの範囲内にあるので、私は、これが何を意味するのか理解しませんか?

def main(): 
    merica = 0 
    commonfactors = [] 
    good = [] 
    count = 1 

    while count <= 1000: 
      if count%3 == 0: 
        good.append(count) 
      elif count%5 == 0: 
        if count in good: 
          commonfactors.append(count) 
        else: 
          good.append(count) 
      count = count+1 
    count = count - 1000 
    while count <= 1000: 
      merica = merica + good[count-1] 
      count = count+1 
    print(merica) 
main() 
exit() 

ご協力いただきありがとうございます。

+0

あなたはカウント1 'の場所で、あなたがエラーを取得 '印刷していますか? – rrauenza

+0

そして 'len(good)'?あなたが作っているという前提があります。 – rrauenza

答えて

0

このブロック全体は正確ではないgoodの長さを想定しています。あなただけそこに自分の番号のサブセットを入れている場合は

while count <= 1000: 
     merica = merica + good[count-1] 
     count = count+1 

、長さは1000

することはできませんかかわらず、あなたはsum()機能に建てについて学ぶ必要があります。

good = [1, 2, 3] 
merica = sum(good) 

あなたも参考にもrange()機能を見つけるかもしれない:

for number in range(1000): 
    # This will loop 1000 times with number equal to 0 to 999. 

これは、コードのレビューになりつつある...しかし、なぜあなたはこれをやっている:

count = count - 1000 

だけではなくcount = 0を設定しますか?

さらに守備的なスタイルのプログラミングを利用することもできます。 assertを使用する方法を学ぶ:

count = count - 1000 
assert count == 0 

assert count-1 < len(good) 
merica = merica + good[count-1] 

これらのアサーションはすぐにあなたを助ける、あなたが作っている仮定を追跡します。

幸運を祈る!

0

カウントが3または5の倍数(両方ではない)の場合は、数値をgoodに追加するだけです。

ので、良いの大きさは、あなたがエラーを取得している理由です1000

ではありません。

あなたの以下のループは最大カウント数< = 466までしか実行されません。エラーがリストインデックスが範囲外であると言うので

def main(): 
    merica = 0 
    commonfactors = [] 
    good = [] 
    count = 1 

    while count <= 1000: 
      if count%3 == 0: 
        good.append(count) 
      elif count%5 == 0: 
        if count in good: 
          commonfactors.append(count) 
        else: 
          good.append(count) 
      count = count+1 
    count = count - 1000 
    while count <= len(good): 
      merica = merica + good[count-1] 
      count = count+1 
    print(merica) 
main() 
exit() 
0

、のリストがどのように長い間、私たちが使用しようとするもののインデックスを検討してみましょう。ここでは、リストgoodに1000個の項目があると仮定しています。なぜなら、whileループは1000まで上がるからです。

while count <= 1000: 
     merica = merica + good[count-1] 
     count = count+1 

わかりましたので、今、私たちは、プログラムリストが1000個のアイテムを持っていることを期待ご覧ください。リストを作成するときにこれが当てはまるかどうかを見てみましょう。

while count <= 1000: 
     if count%3 == 0: 
       good.append(count) 
     elif count%5 == 0: 
       if count in good: 
         commonfactors.append(count) 
       else: 
         good.append(count) 
     count = count+1 

今、私たちはつまり、それが3で割り切れるかのいずれかである必要があり、リストに値が1から1000に行く。しかし、我々はそれを追加するための条件を適用どこに値を追加することによって構築されて見ます5.素数はどうですか?これらの数字を追加するブロックはelseではありません。したがって、1000個の数字のすべてを追加せず、5または3で割り切れるものだけを追加します。

解決策は、ブロック中の2番目のループのサイズについての私たちの仮定を変更します。 while count <= len(good):は、リストのサイズに基づいて長さを調整します。

+0

助けてくれてありがとう! – vaughnmcbob1

関連する問題