我在这个问题上查看了其他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
答案 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