Python程序调试求助:第8行与第10行逻辑不匹配问题
代码问题分析与修复
核心问题(第8、10行)
- 第8行通过
input()获取的d是字符串类型,但第10行的list.insert()方法第一个参数要求是整数类型的索引,直接传入会触发TypeError,这就是逻辑/类型不匹配的根本原因。
其他影响运行的隐藏问题
inventory被定义在for循环内部,每次循环都会重新初始化空列表,导致之前的添加、删除操作全部丢失。- 使用
inventory.remove(c)时,若输入的物品不存在会触发ValueError;且如果有多个相同物品,只会删除第一个匹配项,不符合terminate-item按编号删除的预期。 - 初始化
inventory的写法过于冗余,可简化为inventory = [""] * 50(原列表包含50个空字符串)。
修复后的代码
# 将inventory移到循环外,保留操作状态 inventory = [""] * 50 for i in range(100): a = input("--> ") if a == "inventory": print(inventory) elif a == "add-item": try: # 转换输入为整数并校验范围 d = int(input("item-number--> ")) if 0 <= d < len(inventory): gus = input("item-name--> ") inventory[d] = gus # 按编号替换对应位置,而非插入新元素 print(inventory) else: print(f"索引超出范围,请输入0到{len(inventory)-1}之间的数字") except ValueError: print("请输入有效的整数索引") elif a == "terminate-item": try: c = int(input("terminate--> ")) if 0 <= c < len(inventory): inventory[c] = "" # 恢复对应位置为空字符串,保持列表长度 print(inventory) else: print(f"索引超出范围,请输入0到{len(inventory)-1}之间的数字") except ValueError: print("请输入有效的整数索引") else: print("no")
修复说明
- 把
inventory移到循环外部,确保操作状态能持久保留。 - 对输入做类型转换和范围校验,避免类型错误与索引越界。
- 将
insert改为直接赋值——原逻辑初始化了固定长度的空列表,按需求应是替换对应编号位置的内容,而非插入新元素导致列表变长(若确实需要插入,可保留insert但仍需将输入转为整数)。 - 增加异常捕获,处理用户输入非整数的情况,提升程序健壮性。
内容的提问来源于stack exchange,提问作者AŪGŪŠTŪŚ MĮĒR
相关产品推荐
相关产品推荐

