首先,您似乎已经到了应该学习类和字典的地步,因为如果您确实学习了它们,其中很多都可以简化。但是,如果您想继续使用列表列表来存储数据,这里有一种方法可以修复您的第二个功能:
此列表推导的行为与您预期的一样:
[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,看看有没有变化