0

特定のファイルを調べるプログラムをPythonで作成する必要があります。acronyms.txt としましょう。3 文字の頭字語が少なくとも 1 つ含まれている行数のパーセンテージ値を返します。例えば:

NSW is a very large state.
It's bigger than TAS.
but WA is the biggest!

これを読んだ後、行の 66.7% に 3 文字の頭字語が含まれているため、66.7% が返されます。また、ご覧のとおり、小数点第 1 位に丸められます。私は正規表現にあまり詳しくありませんが、正規表現で最も簡単だと思います。

編集:

コードは完成しましたが、間にドットがある頭字語を認識する必要があります。EG NSW は頭字語として認識されるはずです。どうすればいいですか?

どんな助けでも大歓迎です!

4

2 に答える 2

3

できるよ:

import re
cnt = 0
with open('acronyms.txt') as myfile:
    lines = myfile.readlines()
    length = len(lines)
    for line in lines:
        if re.search(r'\b[A-Z]{3}\b', line) is not None:
            cnt += 1

print("{:.1f}%".format(cnt/length*100))

r'[A-Z]{3}'連続する 3 つ (3 つだけ) の大文字に一致します。検索が見つかった場合は、カウントを追加します。

次に、カウントを行の長さで割って、表示されているように結果を出力します。

于 2013-08-17T11:09:26.007 に答える
2

次のようなことができます:

total_lines = 0
matched_lines = 0
for line in open("filename"):
    total_lines += 1
    matched_lines += bool(re.search(r"\b[A-Z]{3}\b", line))
print "%f%%" % (float(matched_lines) / total_lines * 100)

検索パターンの '\b' に注意してください。単語の先頭または末尾にある空の文字列に一致します。これは、3 つを超える頭字語 ('asdf ASDF asdf') または単語内の頭字語 ('asdfASDasdf') との不要な一致を防ぐのに役立ちます。

于 2013-08-17T11:19:08.200 に答える