编写程序统计mbox-short.txt中发送邮件最多的用户求助
问题分析与修正代码
原代码的问题
- 统计对象错误:找到
From开头的行后,你遍历了该行所有单词并全部统计,但我们只需要统计该行的第二个元素(即邮箱地址wds[1])。 - 最大值查找逻辑混乱:将查找最大值的嵌套循环放在了单词遍历内部,每处理一个单词就重复遍历字典,还频繁输出,导致逻辑错误且输出冗余。
- 变量未初始化:
theword没有提前初始化,极端情况下可能引发未定义错误。
修正后的代码
name = input("Enter file:") if len(name) < 1: name = "mbox-short.txt" handle = open(name) email_counts = {} max_count = 0 max_email = "" for line in handle: line = line.rstrip() words = line.split() # 跳过空行或不符合格式的行 if len(words) < 2 or words[0] != 'From': continue email = words[1] # 统计邮箱出现次数 email_counts[email] = email_counts.get(email, 0) + 1 # 遍历字典找出计数最多的邮箱 for email, count in email_counts.items(): if count > max_count: max_count = count max_email = email print(f"{max_email} {max_count}")
代码说明
- 筛选有效行:通过
len(words) < 2 or words[0] != 'From'跳过空行和非From开头的行,确保只处理包含邮箱的有效行。 - 精准统计邮箱:只提取
words[1]作为邮箱地址,用字典email_counts统计每个邮箱的出现次数。 - 统一查找最大值:在所有邮箱统计完成后,遍历字典一次,找出计数最大的邮箱和对应的次数,最后输出结果。
运行修正后的代码,即可得到预期结果:cwen@iupui.edu 5
内容的提问来源于stack exchange,提问作者Wynnie
相关产品推荐
相关产品推荐

