Python实现字符串中字符'f'的首次及二次出现索引查询
问题分析与修复
问题需求
给定字符串按以下规则处理:
- 无字符'f' → 输出
-1 - 仅一个'f' → 输出其索引
- 两个及以上'f' → 输出前两次出现的索引
示例:输入"office",输出1 2
原代码的问题
你的代码存在几个关键错误:
- 方法调用错误:
s.find('f')返回的是整数索引,没有count()方法,运行会直接抛出AttributeError。统计'f'的数量应该用s.count('f')。 - 条件判断错误:
s.find('f') > 0会漏掉'f'在索引0的情况(此时find返回0,条件不成立,错误输出-1),正确判断应该是检查返回值不等于-1。 - 逻辑缺失:不管'f'出现多少次,都只打印了第一个索引,没有处理第二个索引的输出需求。
修复后的代码方案
方案一:收集所有'f'的索引再处理
这种方式直观清晰,适合需要处理更多索引的场景:
s = input().strip() # 生成所有'f'的索引列表 f_indices = [idx for idx, char in enumerate(s) if char == 'f'] if not f_indices: print(-1) elif len(f_indices) == 1: print(f_indices[0]) else: print(f_indices[0], f_indices[1])
方案二:用两次find定位
如果只需要前两个索引,用find的起始位置参数更高效:
s = input().strip() first_pos = s.find('f') if first_pos == -1: print(-1) else: # 从第一个'f'的下一个位置开始找第二个 second_pos = s.find('f', first_pos + 1) if second_pos == -1: print(first_pos) else: print(first_pos, second_pos)
两种方案都能满足需求,方案二更节省内存(不需要存储所有索引),方案一更灵活(后续要扩展处理更多索引时更方便)。
内容的提问来源于stack exchange,提问作者Albina Hakobyan
相关产品推荐
相关产品推荐

