int对象不是可订阅的错误和列表可变性错误

时间:2018-06-12 06:21:44

标签: python python-3.x

我是新手使用的功能,所以我真的被困在这里有一些错误。 当我运行第二个函数时,我得到一个'int对象不可订阅错误'

当我运行第三个函数时,它正在根据希望的用户输入更改列表,但是当程序再次运行时,它表明更改不是永久性的,列表与之前相同用户输入更改。 (它最后还加上'无'。

1 个答案:

答案 0 :(得分:0)

首先,看起来你已经达到了学习课程和词典的程度,因为如果你学习它们,很多都可以简化。但如果你想继续使用列表列表来存储你的数据,这是修复你的第二个功能的方法:

此列表理解符合您的预期:

[i[products[0].index(inquiry)] for i in products[1:]]

如您所愿,products[1:]products列表中最后两项的列表,如下所示:[[10,30,15], [300, 400, 500]] 因此,当您在第一次迭代中迭代此列表时,i将为[10,30,15],而在第二次迭代中,它将为[300,400,500]

但是下面的其他列表理解并不像你期望的那样, 当您执行products[2]products[1]时,您不会创建products列表的子列表,只需获取该位置的列表即可:

[i[products[0].index(inquiry)] for i in products[2]]

列表i将结束[300, 400, 500]意味着在第一次迭代中i将只是整数300

因为您想要做的是迭代单个字段,您应该不使用列表理解并直接使用products[2]products[1]

def retrieve_info():  
    inquiry = input('Which product would you like information about?')
    if inquiry in products[0]:
        inquiry_2 = input('Would you like information about the quantity, price, or both?')
        if inquiry_2 == 'both':
            print([i[products[0].index(inquiry)] for i in products[1:]])
        if inquiry_2 == 'price':
            print(products[2][products[0].index(inquiry)])
        if inquiry_2 == 'quantity':
            print(products[1][products[0].index(inquiry)])
        if inquiry_2 not in ['both','price','quantity']:
            print('error')
    else:
        print('product not in inventory system')

对于数据存储功能,对我来说似乎很好,尝试在函数的开头和结尾打印products以查看它是否发生变化