2017-01-17 5 views
-1

これはPythonプロジェクト用です。私のwhileループは、条件が満たされてプログラムが「リストインデックスが範囲外です」とエラーを返すと停止しないように見えます。変数 'v'の中には、必要に応じて増分していないように見えます。Pythonでループ用にネストされたデバッグ

コード:

import csv 
file = open("stocklist.csv","r") 

stocklist = csv.reader(file) 

slist = [] 
quant = [] 
x = "yes" 
amofitems = 0 

while x != 'no': 
    GTIN = input("What is the GTIN-8 number of your desired item? ") 
    slist.append(GTIN) 
    #quan = input("How many of this item do you require? ") 
    #quant.append(quan) 
    amofitems = amofitems + 1 
    x = input("Do you wish to purchase another item? Yes/No ").lower() 

product = [] 
v = 0 

while v < amofitems: 
    for row in stocklist: 
     print(row) 
     for item in row: 
      print(item) 
      if item == slist[v]: 
       print("Object found") 
       product.append(row[1]) 
       quant.append(row[2]) 
      print("row:",v) 

     v = v + 1 
     print("V:",v) 

print ("Your selected item is", product, "with a price of") 
file.close() 
+3

スタックトレースなど、あなたが見ている実際のエラーを含めてください。 – TemporalWolf

+0

@alfasin「プログラムはリストインデックスが範囲外です」とエラーを返します – Metropolis

+0

'v = v + 1'をどこで実行してもよろしいですか?あなたはそれを置く? 'stocklist'が空であるため、最初のfor-loopが実行されない場合はどうなりますか? – alfasin

答えて

1

vforループ内でインクリメントすべきではないように見え、そのコードセクションではなく、次のようになります。

while v < amofitems: 
    for row in stocklist: 
     print(row) 
     for item in row: 
      print(item) 
      if item == slist[v]: 
       print("Object found") 
       product.append(row[1]) 
       quant.append(row[2]) 
      print("row:",v) 

    v = v + 1  # different indentation here 
    print("V:",v) 

注あなたのいくつかの方法があることコードは一般的に整理される可能性があります。たとえば、あなたが完全にenumerateを使用してインデックスを維持するために必要避けることができます:

for i, v in enumerate(slist): 
    for row in stocklist: 
     print(row) 
     for item in row: 
      print(item) 
      if item == slist[i]: 
       print("Object found") 
       product.append(row[1]) 
       quant.append(row[2]) 
関連する問題