Python如何正确判断字符串是否存在于文件中,解决单字符匹配误判问题
问题原因
f.read()会一次性读取文件全部内容,读取完成后文件指针会移动到文件末尾,第二次及之后循环调用f.read()只会返回空字符串,后续匹配会全部失效。in运算符对字符串做判断时是子字符串匹配,只要输入的内容是文件内容任意位置的子串就会返回真,所以输入单个A会匹配到ALONE里的A,导致误判。
修复方案
提前把文件内所有有效答案按行读取存入列表,匹配时直接判断输入内容是否和列表中的某一项完全相等。
修正后代码
# 提前读取所有答案,按行拆分,自动去除每行末尾的换行符 with open('D:/VB/Prog/topic1.txt', 'r', encoding='utf-8') as f: valid_answers = [line.strip().upper() for line in f if line.strip()] for i in range(10): answer = input(f'{i+1}. ').upper() if answer in valid_answers: print("found") else: print("not found") break
代码说明
- 使用
with语法打开文件,会自动完成文件关闭操作,避免资源泄漏 - 读取时逐行处理,用
strip()去掉每行首尾的空白字符(包括换行符、空格),过滤空行后存入valid_answers列表 - 匹配时直接判断输入的
answer是否在有效答案列表中,只有完全相等才会返回真,不会出现子串误匹配的问题
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

