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」があるかどうかを確認するだけです.endswith( 'ly')の場合に「ly」としてのみカウントするようにするにはどうすればよいですか(これらのコマンドが使用されると推測していますが、方法がわかりません.誰かが私のコードでこれを行うことができますか?事前に感謝します!

4

1 に答える 1

3

行を単語に分割し、各単語をテストする必要があります。

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

これは (ab) Python ブール値がintand True== 1 and False== 0 のサブクラスであるという事実を利用しています。

フィルターを使用して、より明示的にすることができます。

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

ただし、両方のカウントを 1 つのループに結合したい場合があります。

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 に答える