格罗克学习。信箱中的信件

问题描述 投票:0回答:1

我想写一段代码,让用户输入一个名字,然后读取一个文件并显示这个人有多少邮件。

文件名为mail.txt

Jane Fairfax,Letter
Frank Churchill,Letter
Emma Woodhouse,Letter
Frank Churchill,Letter
Harriet Smith,Package
Emma Woodhouse,Letter
Philip Elton,Package
Emma Woodhouse,Package

程序应该是这样工作的。

Name: Emma Woodhouse
2 Letters
1 Package

如果他们有一个包裹和两个字母,

Name: Jane Fairfax
1 Letter
No Packages

如果他们有1封信而没有包裹,如果这个人没有任何邮件,你的程序应该这样工作。

Name: Elizabeth Bennet
No mail

这是我目前的代码(没有用)

name = input('Name: ')
mail = open('mail.txt')
m = mail.readlines()
l = ''
ln = 0 
p = []
pn= 0 
for line in m:
  if name in line:
    l= line.split(',')
    if l[1] == 'Letter':
      ln= ln+1
    else:
      pn = pn+1
print(str(ln) + ' Letters\n' + str(pn) + ' Packages')

而这是它返回的内容。

Name: Emma Woodhouse
0 Letters
3 Packages

我正在努力解决这个问题,我甚至还没有开始添加额外的元素!!我会继续努力,但一些帮助input将非常感激! (我想我可能要使用(def),但我不确定...)谢谢!

python python-3.x grok
1个回答
0
投票

你的 l[1] 包含一个新的行字符。如果你打印它,你会发现它=='Letter/n',因此不等于'Letter'。

你可以 .strip() 你的线或l[1]或使用 if 'Letter' in l[1] 以使它能容忍白色空间。

由于它不匹配'Letter',它总是进入 else(包)块。你也许应该明确地测试包,并将 else 子句作为一个未知的异常情况。

© www.soinside.com 2019 - 2024. All rights reserved.