Python开发在线购物车时,使用列表作为另一列表索引触发TypeError的问题求助
嘿,作为Python新手遇到这种问题很正常,咱们一步步拆解解决:
首先,你的错误根源
你触发的TypeError: list indices must be integers or slices, not list,本质是因为**code_inputed变成了嵌套列表**(列表里套着列表),而你试图用这个嵌套列表去索引productList——但Python规定列表的索引只能是整数或者切片,不能是另一个列表。
看你这段输入代码就明白了:
else: code_input.append(i) quan_input.append(s) code_inputed.append(code_input) quan_inputed.append(quan_input)
你每次把整个code_input列表(而不是单个商品代码i)添加到code_inputed里。比如用户输入第一个商品代码1,code_input变成[1],code_inputed就变成[[1]];再输入第二个代码2,code_input变成[1,2],code_inputed就变成[[1], [1,2]]——这里面的每个元素都是列表,自然没法当索引用。
第一步:修正输入逻辑
如果你的需求是存储每个商品的单个代码和对应数量,完全不需要中间的code_input和quan_input列表,直接把单个值加到目标列表里就行:
else: # 直接添加单个商品代码和数量,避免嵌套 code_inputed.append(i) quan_inputed.append(s)
这样code_inputed就会变成类似[1, 3, 5]的整数列表,每个元素都是合法的索引值。
另外别忘了把用户输入的代码转换成整数(如果用户输入的是字符串,比如"1",也会触发索引错误):
# 接收输入时转成整数 i = int(input("请输入商品代码: ")) s = int(input("请输入商品数量: "))
第二步:修复display函数
原来的函数逻辑有点混乱,咱们用zip函数把商品代码和对应数量配对遍历,再用代码去索引productList。假设productList是类似[["商品0", 10], ["商品1", 20], ["商品2", 30]]的结构(每个元素是商品名称+价格的元组/列表),可以这样写:
def display(): # 同时遍历商品代码和对应的数量 for code, quan in zip(code_inputed, quan_inputed): # 用整数代码索引商品列表,取出名称和价格 product_name, product_price = productList[code] # 格式化打印信息 print(f"商品名称: {product_name} | 单价: {product_price} | 数量: {quan}")
测试示例
假设你的productList定义如下:
productList = [ ["矿泉水", 2], ["面包", 5], ["牛奶", 6] ] code_inputed = [0, 1, 2] quan_inputed = [3, 2, 1]
调用display()后,会输出:
商品名称: 矿泉水 | 单价: 2 | 数量: 3 商品名称: 面包 | 单价: 5 | 数量: 2 商品名称: 牛奶 | 单价: 6 | 数量: 1
内容的提问来源于stack exchange,提问作者user20033631

