AIZU ONLINE JUDGE ITP1_9_Aをpythonで解いてみた

python

本サイトAIZU ONLINE JUDGE ITP1_9_A へはこちらから

目次

問題:単語の検索

1つの単語 W と文章 T が与えられます。T の中にある W の数を出力するプログラムを作成して下さい。

文章 T に含まれるスペースまたは改行で区切られた文字列を単語 Ti とします。すべての Ti において単語 W と同じになるものを数えて下さい。

なお、大文字と小文字は区別しません。

Constraints

  • Wの文字列の長さは10を超えない
  • Wに含まれる文字はすべてアルファベット小文字である
  • Tの1行あたりの文字列の長さは1000を超えない

Input

1行目に単語 W が与えられます。

続いて、複数の行にまたがった文章与えられます。END_OF_TEXT という文字列が文章の終わりを示します。

Output

単語 W の数を出力して下さい。

Sample Input

computer
Nurtures computer scientists and highly skilled computer engineers
who will create and exploit knowledge for the new era
Provides an outstanding computer environment
END_OF_TEXT

Sample Output

3

解答例

word = input()
cnt = 0
while True:
    sentence = input()
    if sentence == "END_OF_TEXT":
        break
    else:
        cnt += sentence.lower().split().count(word)
print(cnt)

解説

以下のように解いていきます。

  1. 1つの文字列の読み込み
  2. while文を使用した複数の行にまたがった文章の読み込みと単語数のカウント
  3. 単語の数の表示

1つの文字列の読み込み

ここでは、input関数を使用し、任意の文字列を取得します。

# キーボードからの入力を文字列として受け取る
word = input()

※サイト内「AIZU ONLINE JUDGE ITP1_1_Bをpythonで解いてみた」の、input関数とはに使用方法が書かれておりますのでぜひご覧ください。

while文を使用した複数の行にまたがった文章の読み込みと単語数のカウント

ある条件まで入力を続ける場合はwhile文とif文を組み合わせて、入力処理を行います。

# if文の条件式に当てはまるまでループ処理を続ける
while True:
    処理
    # この条件式に当てはまる場合、break文でループ処理を終了する
    if 条件式:
        break

今回は、whileループ内でinput関数を使用し、1列文章を読み込みと”END_OF_TEXT”が入力されるまで単語数のカウント処理を行います。

単語数のカウント処理ではまず、入力された1列の文章をlowerメソッドで小文字にします。次に、splitメソッドでスペースごとに区切りリストにします。普段の標準入力でinput().split()splitと同様です。そしてcountメソッドを利用し、リストのなかに含まれる単語の個数を調べます。

# カウンタを用意する
cnt = 0
# 終了条件に当てはまるまで処理を続ける
while True:
    # 1列の文章の読み込み
    sentence = input()
    # "END_OF_TEXT"が入力された場合にbreak文で処理を終了
    if sentence == "END_OF_TEXT":
        break
    # 文章をlowerメソッドで全て小文字に変換 → splitメソッドで区切る → countメソッドで単語数をカウント
    else:
        cnt += sentence.lower().split().count(word)

ここで使用したcountメソッドについて説明します。

countメソッドとは

countメソッドはシーケンス型(リスト、タプル、range, 文字列etc)の共通メソッドで、特定の文字(列)や要素の出現回数をカウントしてくれます。使い方は次の通りです。

str.count(sub[, start[, end]])

実際の使い方は次の通りです。

s = 'aAaAAbAccdd'
sの中の'A'の数をカウント
print(s.count('A'))

# 出力
4

単語の数の表示

print関数を使用し、2.while文を使用した複数の行にまたがった文章の読み込みと単語数のカウントで算出した単語数を表示します。

# 単語数の表示
print(cnt)

※サイト内の「AIZU ONLINE JUDGE ITP1_1_Aをpythonで解いてみた」の、print関数とはにprint関数の使用方法が書かれておりますのでよかったらご覧ください。

最後に、もう一度プログラムを確認してみましょう。

# キーボードからの入力を文字列として受け取る
word = input()
# カウンタを用意する
cnt = 0
# 終了条件に当てはまるまで処理を続ける
while True:
    # 1列の文章の読み込み
    sentence = input()
    # "END_OF_TEXT"が入力された場合にbreak文で処理を終了
    if sentence == "END_OF_TEXT":
        break
    # 文章をlowerメソッドで全て小文字に変換 → splitメソッドで区切る → countメソッドで単語数をカウント
    else:
        cnt += sentence.lower().split().count(word)
# 単語数の表示
print(cnt)
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

雇われのシステムエンジニアです。
普段は車載ECUのセキュリティー分野に従事しております。

■保有資格
Salesforce 認定 Platform アプリケーションビルダー
Salesforce 認定 Platform デベロッパー

コメント

コメントする

目次