You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PY4E字典作业调试:统计邮件发送次数代码输出异常怎么办?

问题根源

你的代码用line.startswith("From")作为判断条件,会同时匹配两种行:

  • 作业要求的**From (末尾带空格)**:这类行是邮件发送的记录行,每一行对应一次发送行为
  • From:(末尾带冒号):这类行是邮件头部的发件人字段,不属于需要统计的发送记录

这就导致每个真实的发送行为被重复统计了一次,所以原本应该是5次的结果变成了10次。

调试步骤
  1. 打印匹配到的原始行:在循环里添加打印语句,查看所有被匹配的行内容,确认是否混入了From:开头的行:
    for line in handle:
        if line.startswith("From"):
            print(repr(line))  # repr()能清晰显示行的开头字符和换行符
            line = line.split()
            lst.append(line[1])
    
    运行后你会看到类似'From: stephen.marquard@uct.ac.za\n'的输出,这些就是不该被统计的行。
  2. 核对列表元素数量:统计lst的总长度,再手动数一下mbox-short.txt里From 开头的行数量,会发现前者是后者的两倍,验证重复计数的问题。
  3. 检查字典计数:打印counts的所有键值对,对比每个邮箱的计数和实际发送次数,能直接看到每个邮箱的计数都翻倍了。
修正后的代码

只需要把判断条件改成匹配"From "(带空格)即可:

name = input("Enter file:")
if len(name) < 1 : name = "mbox-short.txt"
handle = open(name)

lst = list()
for line in handle:
    if not line.startswith("From "): continue  # 这里加上空格
    line = line.split()
    lst.append(line[1])

counts = dict()
for word in lst:
    counts[word] = counts.get(word, 0) + 1

bigword = None
bigcount = None
for word,count in counts.items():
    if bigcount is None or count > bigcount:
        bigword = word
        bigcount = count
        
print(bigword,bigcount)

内容的提问来源于stack exchange,提问作者PixelPusher42

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 17:55:23