列表索引超出if语句的范围

时间:2016-11-02 19:23:32

标签: python list

我在这个问题上查看了其他Stack Overflow帖子,但我仍然不明白我试图制作的这个程序的错误。我不明白为什么List索引超出了for循环中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

2 个答案:

答案 0 :(得分:4)

您在while循环中检查orderCount,但在for循环中增加它。

您可以删除while循环并将其放在for循环中:

if len(order) <= orderCount:
    break

答案 1 :(得分:1)

您没有检查以确保orderCount在内循环的迭代中小于len(order);包含4行或更多行的文件将导致orderCount最终达到8或更高,这超出order列表的范围。

解决这个问题的一个简单方法(虽然你必须评估自己这是否会给你所期望的行为,我不能说明这一点)是在orderCount >= len(order)时突破内循环,像这样:

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