【问题标题】:int object is not subscriptable error and list mutability errorint object is not subscriptable 错误和列表可变性错误
【发布时间】:2018-06-12 06:21:43
【问题描述】:

我是使用函数的新手,所以我真的遇到了一些错误。 当我运行第二个函数时,我得到一个“int object is not subscriptable error”

当我运行第三个函数时,它正在根据用户输入更改列表,但是当再次运行程序时,它显示更改不是永久的,列表与之前相同用户输入变化。 (它也把“无”放在最后。

【问题讨论】:

  • 你不能指望在脚本的不同运行之间神奇地保存数据,毕竟每次你尝试运行它时 python 都会解释文件
  • 不是完全不同的运行,当我继续运行循环时

标签: python python-3.x


【解决方案1】:

首先,您似乎已经到了应该学习类和字典的地步,因为如果您确实学习了它们,其中很多都可以简化。但是,如果您想继续使用列表列表来存储数据,这里有一种方法可以修复您的第二个功能:

此列表推导的行为与您预期的一样:

[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,看看有没有变化

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-15
    • 2018-01-23
    • 2018-02-05
    • 1970-01-01
    • 2020-08-05
    • 2018-10-15
    相关资源
    最近更新 更多