为什么错误,列表索引超出范围?

时间:2014-05-12 07:58:06

标签: python

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

2 个答案:

答案 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