Python统计文件最高频A-Z字符时输出异常的问题排查
代码问题分析
你的代码存在多处逻辑错误,导致统计结果不符合预期,具体疏漏如下:
- 变量名不统一:初始化计数数组时你定义的变量是
array,但后续计数、遍历阶段全部用了未声明的变量a。如果运行环境里有之前残留的a变量,会直接复用该变量的内容,计数逻辑完全失效,这是你输出4个结果的核心原因。 - 未过滤非大写A-Z字符:代码默认所有读取的字符都是大写A-Z,没有做任何校验。一旦文件里有小写字母、数字、标点、空格等其他字符,
ord(x) - ord("A")的结果会超出0~25的合法索引范围,要么触发越界报错,要么错误修改其他数据,导致计数混乱。 - 未指定文件编码:调用
open()读取文件时没有显式指定编码,不同操作系统默认编码不同,读取含非ASCII字符的文件时会出现乱码,进一步干扰统计结果。
修正后参考代码
with open("24.txt", encoding="utf-8") as f: st = f.read() count = [0] * 26 for x in st: # 仅统计大写A-Z字符 if 'A' <= x <= 'Z': count[ord(x) - ord("A")] += 1 max_cnt = 0 max_char_idx = 0 for i in range(26): if count[i] > max_cnt: max_cnt = count[i] max_char_idx = i print(chr(max_char_idx + ord("A")), max_cnt)
内容的提问来源于stack exchange,提问作者Rendivy
相关产品推荐
相关产品推荐

