def Receipt():
print("Receipt:")
print("\n")
print(Customer_name, "ordered:")
if numPizza == 1:
print("%s" % str(order[0]))
elif numPizza == 2:
print("%s" % str(order[0]))
print("%s" % str(order[1]))
elif numPizza == 3:
print("%s" % str(order[0]))
print("%s" % str(order[1]))
print("%s" % str(order[2]))
elif numPizza == 4:
print("%s" % str(order[0]))
print("%s" % str(order[1]))
print("%s" % str(order[2]))
print("%s" % str(order[3]))
elif numPizza == 5:
print("%s" % str(order[0]))
print("%s" % str(order[1]))
print("%s" % str(order[2]))
print("%s" % str(order[3]))
print("%s" % str(order[4]))
numPizza变量来自代码中的另一个输入。
numPizza = input("Enter number of pizzas wanted (Max 5): ")
这是它打印的错误:
print("%s" % str(order[1]))
IndexError: list index out of range
答案 0 :(得分:0)
原因是,您要么order
列表中没有项目,要么只有一项。
请注意,列表是zerobased索引的,因此要访问第一项,请使用order[0]
要检入您的代码,您的列表变量有足够的项目,您可以添加
assert len(order) >= 2
这应该在试图使用给定索引1的语句之前(在开发期间)完成。
如果不满足此前提条件,它将抛出异常。
您的numPizza
可能未分配到正确的值。检查一下。
答案 1 :(得分:0)
在Python中,您不必单步执行此类列表;请考虑以下事项:
def receipt(): # method names should be lower case
print("Receipt:\n")
print('{} ordered:\n'.format(Customer_name))
for item in order:
print('{}'.format(item))
现在,无论订单中有多少个比萨饼,它们都会被打印出来。您可以通过加入结果列表来进一步缩短代码:
>>> '\n'.join(['a','b','c'])
'a\nb\nc'
但请记住,如果您的列表包含数字,则无效:
>>> '\n'.join(['a','b',1])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: sequence item 2: expected string, int found