遍历单词列表并打印不含指定子串字符的单词:代码错误排查
问题分析与修正
你的代码逻辑完全搞反了——现在的逻辑是只要当前检查的字符不在单词里,就立刻打印这个单词,而不是等所有禁止字符都检查完,确认没有一个存在才打印。
比如单词be里包含b,但第一个检查的字符是a,发现a不在,就直接打印了,根本没去检查后面的b和o,这就是为什么含b、o的单词会被输出。
修正后的代码
words = open('words.txt') def avoids(fin, forbidden_chars): for line in fin: word = line.strip() # 先去掉换行符和首尾空格 is_valid = True # 默认单词符合要求 for char in forbidden_chars: if char in word: is_valid = False break # 只要发现一个禁止字符,就不用再检查了 if is_valid: # 所有禁止字符都不在单词里才打印 print(word) avoids(words, 'abo')
关键修正点
- 先把每行处理成干净的单词(
strip()),避免换行符干扰字符检查 - 先假设单词合法,再逐个检查禁止字符,发现违规就标记为不合法并终止检查
- 只有等所有禁止字符都检查完,确认单词完全不包含任何禁止字符时,才打印
内容的提问来源于stack exchange,提问作者zweizeiler
相关产品推荐
相关产品推荐

