Python带格式输入与对象属性匹配失败问题求助
我来帮你搞定这个问题,咱们先看看第一段代码为啥跑不起来,再给你修复方案~
问题根源分析
第一段代码处理Input: blue, 'message'这类输入时失效,主要是两个细节没处理好:
- 未清理输入中的多余空格:
当你执行inp.split(':')[1]时,得到的是" blue, 'message'"(注意开头有空格),直接拆分逗号后第一个元素是" blue"(带前导空格),而你的Ball对象的color是'blue'(无空格),两者自然匹配不上。 - 未处理字符串中的引号干扰:
拆分后第二个元素是" 'message'",虽然这里不影响颜色匹配,但如果后续要处理消息字段,引号会导致内容不规整。
修复后的代码
class Ball(object): def __init__(self, color, size): self.color = color self.size = size b = [] b.append(Ball('red', '3')) b.append(Ball('blue', '4')) b.append(Ball('green', '5')) b.append(Ball('grey', '6')) b.append(Ball('black', '7')) b.append(Ball('purple', '8')) inp = input() # 提取冒号后的内容并清除首尾空格 temp_inp = inp.split(':')[1].strip() # 拆分出颜色部分:取逗号前的内容,清除空格和可能的引号 target_color = temp_inp.split(',')[0].strip().strip("'\"").lower() for each in b: # 把Ball的color也转小写,兼容大小写输入(比如Blue、BLUE都能匹配) if target_color == each.color.lower(): print(each.size)
关键修改说明
- 用
.strip()清理冒号后内容的首尾空格,彻底消除前导空格的干扰; - 拆分逗号后只取第一个元素作为颜色,忽略后面的
'message'内容,符合你的需求; - 增加
.strip("'\"")处理颜色可能带的单/双引号(如果输入是Input: 'blue', 'message'也能正常匹配); - 匹配时将Ball的color也转小写,让输入更灵活(比如输入
Blue也能找到对应球)。
现在测试输入Input: blue, 'message',代码会正确提取出blue,匹配到对应的Ball对象,输出4啦~
内容的提问来源于stack exchange,提问作者Prince Kumar
相关产品推荐
相关产品推荐

