Python Classy类addItem方法替换列表元素值失效问题排查
问题根源
你的addItem方法里的循环逻辑完全出错,导致只有第一次添加的元素能被正确转换,后续操作全部失效,具体问题点:
循环范围完全无意义
你写的for i in range(len(self.add_item[0])),这里self.add_item是传入的物品名字符串(比如"bowtie"),self.add_item[0]是字符串的第一个字符,长度永远是1,所以循环只会执行i=0这一次。检查对象错误
每次调用addItem时,新物品会被添加到self.items的末尾,但循环只检查索引0的元素:- 第一次添加"tophat"时,
self.items只有["tophat"],i=0刚好是新元素,能匹配替换; - 后续添加任何物品(比如"bowtie"),
self.items变成[2, "bowtie"],循环只看索引0的2,根本不会处理刚添加的末尾元素,直接返回"NO item added"。
- 第一次添加"tophat"时,
提前return打断流程
就算循环范围正确,你匹配到一个元素就直接return终止逻辑,但实际上你只需要处理刚添加的那一个元素,完全不需要循环所有元素。
修复后的代码
要实现正确逻辑,直接针对刚添加的元素做判断即可,没必要做无意义的循环:
class Classy(object): def __init__(self): self.items = [] def addItem(self, name): # 用字典映射物品与对应优雅值,比多分支if更简洁 value_map = {"bowtie": 4, "tophat": 2, "monocle": 5} if name in value_map: self.items.append(value_map[name]) print("Item Added") else: # 若不需要保留无效物品,可删除此行append self.items.append(name) print("NO item added") def getClassiness(self): total_classiness = 0 for item in self.items: # 只累加数值类型的优雅值,忽略无效物品 if isinstance(item, int): total_classiness += item return total_classiness me = Classy() # 输出0 print(me.getClassiness()) me.addItem("tophat") # 输出2 print(me.getClassiness()) me.addItem("bowtie") me.addItem("jacket") me.addItem("monocle") # 输出11 print(me.getClassiness()) me.addItem("bowtie") # 输出15 print(me.getClassiness())
内容的提问来源于stack exchange,提问作者juno
相关产品推荐
相关产品推荐

