PY4E字典作业调试:统计邮件发送次数代码输出异常怎么办?
问题根源
你的代码用line.startswith("From")作为判断条件,会同时匹配两种行:
- 作业要求的**
From(末尾带空格)**:这类行是邮件发送的记录行,每一行对应一次发送行为 From:(末尾带冒号):这类行是邮件头部的发件人字段,不属于需要统计的发送记录
这就导致每个真实的发送行为被重复统计了一次,所以原本应该是5次的结果变成了10次。
调试步骤
- 打印匹配到的原始行:在循环里添加打印语句,查看所有被匹配的行内容,确认是否混入了
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'的输出,这些就是不该被统计的行。 - 核对列表元素数量:统计
lst的总长度,再手动数一下mbox-short.txt里From开头的行数量,会发现前者是后者的两倍,验证重复计数的问题。 - 检查字典计数:打印
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
相关产品推荐
相关产品推荐

