Python作业求助:字符串检测替换与循环逻辑问题排查
问题分析与代码修正
原代码存在的问题
- 大小写丢失:将输入整体转为小写,导致输出无法保留原文本的大小写格式(如示例中其他单词应保持原有大小写)。
- 条件判断错误:
if userInputList in badWords逻辑不成立——userInputList是单词列表,badWords是敏感词字符串列表,该判断永远为False,导致替换逻辑从未执行。 - 无限循环风险:while循环中仅在匹配"frak"时递增索引
i,匹配"dren"时索引不变化,会陷入无限循环。 - 输出格式错误:直接打印列表会输出带方括号和逗号的格式,不符合示例中的句子形式。
修正后的代码
while True: # 接收用户输入,不转换大小写,仅去除首尾空白 user_input = input("What shall I censor: ").strip() if not user_input: print("Goodbye!") break # 分割为单词列表 words = user_input.split() bad_words = {"dren", "frak"} # 用集合提高查找效率 # 遍历处理每个单词 processed_words = [] for word in words: # 检查单词小写形式是否在敏感词中 if word.lower() in bad_words: processed_words.append("BEEP") else: processed_words.append(word) # 拼接为句子并输出 print(" ".join(processed_words)) print() # 空行分隔,匹配示例格式
修正说明
- 保留输入的原始大小写,仅在检测敏感词时转换为小写判断,确保替换准确且其他单词格式不变。
- 使用集合存储敏感词,比列表查找效率更高。
- 用for循环遍历单词,避免while循环的索引错误问题。
- 将处理后的单词列表拼接为字符串输出,符合示例的句子格式。
- 输入为空时输出"Goodbye!"并退出循环,匹配需求。
内容的提问来源于stack exchange,提问作者Buddy Chung
相关产品推荐
相关产品推荐

