我在学习
"Python for Everybody"
这本书是由查尔斯R.Severance和我写的,从第7章开始,我有一个问题要问练习2。
任务是通过
mbox-short.txt
文件和“当您遇到以__x-dspam-confidence:_157;开头的行时,拉开该行以提取该行上的浮点数。计算这些行,然后从这些行计算垃圾邮件置信度值的总数。当您到达文件结尾时,打印出平均垃圾邮件可信度。“
以下是我完成这项任务的方法:
fname = input('Enter the file name: ')
try:
fhand = open(fname)
except:
print('File cannot be opened:', fname)
exit()
count = 0
values = list()
for line in fhand:
if line.startswith('X-DSPAM-Confidence:'):
string = line
count = count + 1
colpos = string.find(":")
portion = string[colpos+1:]
portion = float(portion)
values.append(portion)
print('Average spam confidence:', sum(values)/count)
我知道这段代码是有效的,因为我得到了和书中相同的结果,但是,我认为这段代码可以更简单。我之所以这么认为是因为我在代码中使用了一个列表(声明它,然后在其中存储值)。然而,“列表”是书中的下一个主题,在解决这个任务时,我对列表一无所知,不得不谷歌搜索它们。我以这种方式解决了这个任务,因为这是我在R语言中要做的(我已经很熟悉了),所以我将创建一个向量,在其中存储迭代中的值。
所以我的问题是:这个代码可以简化吗?我可以在不使用列表的情况下完成相同的任务吗?如果是,我怎么做?