Python统计两文件匹配字母数量程序运行结果不符合预期求助
问题原因分析
- 第一个逻辑错误:直接调用
read()读取文件得到的是包含所有空格、原文本格式符的完整字符串,没有将两个文件的答案按位置提取成独立的答案列表,你现在遍历的是answer字符串里的每一个字符,包括中间大量的空格,而不是10个待比对的字母。 - 第二个核心逻辑错误:
index(i)仅能判断字符i是否存在于user字符串中,完全没有校验相同位置的答案是否匹配,只要字母在user里出现过就会被计入,根本达不到逐位比对的效果。 - 补充:你现在的写法如果遇到answer里有user不存在的字符还会直接抛出ValueError异常,鲁棒性很差。
修正方案
首先需要先把两个文件的内容处理成仅包含答案字母的、按顺序排列的列表,再逐位比对计数:
# 读取文件并提取答案列表,按空白字符分割后过滤掉空值 with open("user.txt", 'r') as f1, open("answers.txt", 'r') as f2: user_answers = [i for i in f1.read().split() if i] standard_answers = [i for i in f2.read().split() if i] # 逐位比对统计匹配数 correct_count = 0 for u, s in zip(user_answers, standard_answers): if u == s: correct_count += 1 print(f"There are {correct_count} correct answers")
运行后输出结果为There are 7 correct answers,和预期一致。
验证比对结果
手动逐位核对两个文件的答案:
- 第1位:A vs A → 匹配
- 第2位:C vs C → 匹配
- 第3位:B vs A → 不匹配
- 第4位:A vs A → 匹配
- 第5位:A vs A → 匹配
- 第6位:D vs B → 不匹配
- 第7位:B vs B → 匹配
- 第8位:B vs B → 匹配
- 第9位:C vs C → 匹配
- 第10位:A vs D → 不匹配
总共匹配7次,结果正确。
内容的提问来源于stack exchange,提问作者njtmann
相关产品推荐
相关产品推荐

