2016-11-02 4 views
1

Ich habe mir andere Stack-Überlauf-Beiträge zu dieser Frage angeschaut, aber ich verstehe immer noch nicht den Fehler dieses Programms, das ich versuche zu machen. Ich verstehe nicht, warum der List-Index in der if-Anweisung innerhalb der for-Schleife außerhalb des Bereichs liegt. Könnte mir bitte jemand das erklären und was ändern, um es zu reparieren.Listenindex außerhalb des Bereichs bei if-Anweisung

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' ist größer als der größte Index von' order'. Sie versuchen, dies mit dieser 'while'-Schleife zu stoppen, aber fragen Sie sich: Wann prüft die Schleife, wie groß 'orderCount' ist und wann' orderCount' größer wird –

Antwort

3

Sie überprüfen die orderCount in der While-Schleife, aber erhöhen Sie es in der for-Schleife.

Sie könnten die while-Schleife entfernen und diese für Schleife in die setzen:

if len(order) <= orderCount: 
    break 
0

Sie nicht sicher zu machen sind, prüfen, ob orderCount weniger als len(order) auf den Iterationen Ihrer inneren Schleife; Eine Datei mit 4 oder mehr Zeilen führt dazu, dass orderCount bei 8 oder höher endet, was außerhalb der Grenzen der order Liste liegt.

Ein einfacher Weg, um dies zu beheben (obwohl Sie selbst bewerten müssen, ob dies Ihnen das gewünschte Verhalten gibt, kann ich nicht damit sprechen) ist aus der inneren Schleife zu brechen, wenn orderCount >= len(order), wie folgt:

while orderCount < len(order): 
    for line in file: 
     ... 
     orderCount += 2 
     if orderCount >= len(order): 
      break 
Verwandte Themen