2016-11-02 10 views
1

私はこの質問の他のスタックオーバーフローポストを見ましたが、私はまだ試みているこのプログラムのエラーを理解していません。 forループ内のifステートメントでListインデックスが範囲外である理由はわかりません。誰かが私にそれを説明し、それを修正するために何を変えてください。リストのインデックスがif文の範囲外にある

order = ["12345678", "2", "12345670", "2", "11111111", "3", "87654321", "8"] 
orderCount = 0 
productCount = 0 

file = open("file.txt", "r") 

print(len(order)) 

while orderCount < len(order): 
    for line in file: 
     product = line.split(",") 
     print(orderCount) 
     if order[orderCount] == product[0]: 
      totalCost = float(order[1]) * float(product[2].strip('\n')) 
      receipt = product[productCount], product[1], order[1], product[2].strip('\n'), str(totalCost) 
      receipt = " ".join(receipt) 
      print(receipt) 

     else: 
      print("Product not found.") 
     orderCount += 2 
+3

「orderCount」は、「order」の最大インデックスよりも大きい。そのwhileループでこれをやめようとしているのですが、自分自身に質問してください。いつループが 'orderCount'と' orderCount'が大きいかを確認します –

答えて

3

あなたは、whileループでorderCountをチェックしますが、forループでそれを増やします。

あなたは、whileループを削除し、forループ内でこれを置くことができます:あなたはorderCountは、あなたの内側のループの反復に未満len(order)であることを確認するためにチェックされていない

if len(order) <= orderCount: 
    break 
0

。 4行以上のファイルがあると、orderCountは8301になります。これはorderリストの範囲外です。

orderCount >= len(order)のように、内部ループから脱出することです。これを修正する簡単な方法(これはあなたに望ましい動作を与えるかどうかを評価する必要がありますが)

while orderCount < len(order): 
    for line in file: 
     ... 
     orderCount += 2 
     if orderCount >= len(order): 
      break 
関連する問題