3

我已经有这个代码:

f = open("unknown.txt", 'r')
a = sum(line.count('ly').endswith() for line in f)

words = 0

with open("unknown.txt", 'r') as f:
    words = len(f.read().split())

try:
    percentage = a/words*100
    print('{}% adverbs'.format(percentage))
except:
    print('File is empty!')

但这所做的只是检查一个单词中是否有 'ly',我该如何让它只算作 'ly' if .endswith('ly') (我猜这些命令将被使用,但是我不知道怎么做。有人可以让我的代码这样做吗?提前谢谢!

4

1 回答 1

3

您必须将行拆分为单词并测试每个单词:

a = sum(word.endswith('ly') for line in f for word in line.split())

这个 (ab) 使用了 Python 布尔值是intand True== 1 和False== 0 的子类这一事实。

您可以使用过滤器使其更明确:

a = sum(1 for line in f for word in line.split() if word.endswith('ly'))

但是,您可能希望将两个计数合并到一个循环中:

with open("unknown.txt", 'r') as f:
    total = lycount = 0
    for line in f:
        words = line.split()
        total += len(words)
        lycount += sum(1 for word in words if word.endswith('ly'))

try:
    percentage = (lycount / total) * 100
    print('{}% adverbs'.format(percentage))
except ZeroDivisionError:
    print('File is empty!')

请注意,您永远不应该使用毯子 except 声明;只是捕获特定的异常。

于 2013-08-30T07:57:05.513 回答