Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで文字列内の単語数を数えるプログラムの書き方【初心者向け】

テキスト処理を行っていると、「入力された文字列の中に単語がいくつ含まれているのか」「特定の単語が何回出現するのか」を調べたい場面によく出会います。この記事では、Pythonを使って文字列内の単語数を数え、その結果を出力する複数の方法を、サンプルコードと実行結果付きでわかりやすく解説します。

基本的な考え方はシンプルです。「単語は空白・改行・タブなどの区切り文字で分けられている」ため、区切り文字の出現回数を数えれば、単語数は「区切り文字の数+1」として求められます。

方法1:forループを使う

まずは最も基本的な方法です。文字列を1文字ずつ順番に調べ、区切り文字が見つかるたびにカウントを1ずつ増やしていきます。

test_string = input("検索対象の文字列を入力してください : ")
total = 1

for i in range(len(test_string)):
    if(test_string[i] == ' ' or test_string[i] == '\n' or test_string[i] == '\t'):
        total = total + 1

print("入力された文字列の単語数は : ", total)

実行結果

検索対象の文字列を入力してください : Python is a high level language. Python is interpreted language. Python is general-purpose programming language
入力された文字列の単語数は : 16

このコードでは、変数totalの初期値を「1」に設定している点がポイントです。最初の単語の前には区切り文字がないため、あらかじめ1を入れておくことで正しい単語数が求まります。

方法2:whileループを使う

同じ処理をwhileループでも実装できます。インデックス変数iを自分で管理しながら、文字列の末尾まで繰り返し処理を行います。

test_string = input("検索対象の文字列を入力してください : ")
total = 1
i = 0

while(i < len(test_string)):
    if(test_string[i] == ' ' or test_string[i] == '\n' or test_string[i] == '\t'):
        total = total + 1
    i += 1

print("入力された文字列の単語数は : ", total)

実行結果

検索対象の文字列を入力してください : Python is a high level language. Python is interpreted language. Python is general-purpose programming language
入力された文字列の単語数は : 16

forループ版とまったく同じ結果になります。ループの書き方が違うだけで、判定ロジック自体は同一です。

方法3:関数として定義する

処理を関数にまとめると、プログラムの再利用性が高まり、コードも読みやすくなります。実際の開発では、このように機能ごとに関数化しておくのが良い習慣です。

def count_words(test_string):
    word_count = 1
    for i in range(len(test_string)):
        if(test_string[i] == ' ' or test_string[i] == '\n' or test_string[i] == '\t'):
            word_count += 1
    return word_count

test_string = input("検索対象の文字列を入力してください : ")
total = count_words(test_string)
print("入力された文字列の単語数は : ", total)

実行結果

検索対象の文字列を入力してください : Python is a high level language. Python is interpreted language. Python is general-purpose programming language
入力された文字列の単語数は : 16

補足:split()メソッドを使えばさらに簡単

Pythonには、文字列を区切り文字で分割してリストにしてくれるsplit()メソッドが用意されています。これを使えば、上記のようなループ処理を書かなくても、たった2行で単語数を数えられます。

test_string = input("検索対象の文字列を入力してください : ")
words = test_string.split()
print("入力された文字列の単語数は : ", len(words))

split()は引数を指定しない場合、連続した空白や改行・タブを自動的に区切り文字として扱ってくれるため、より堅牢でPythonらしい書き方といえます。

まとめ

この記事では、Pythonで文字列内の単語数を数える方法として、forループ、whileループ、関数化の3つのアプローチと、split()を使った簡潔な方法を紹介しました。

  • forループ/whileループ: 1文字ずつ判定するため、アルゴリズムの基礎を学ぶのに最適
  • 関数化: 処理を部品として再利用でき、コードの保守性が向上する
  • split()メソッド: 実務では最もシンプルで推奨される書き方

学習段階ではループを使った方法で仕組みを理解し、実際のコードではsplit()を活用する、という使い分けがおすすめです。

  1. 文字列の中から偶数の長さの単語を出力するPythonプログラム

    本記事では、与えられた問題を解決するための考え方と実装方法について解説します。Pythonの基本的な文字列操作を組み合わせることで、初心者の方でも簡単に実装できる内容となっています。 問題文 文字列が与えられたとき、その中に含まれる単語のうち、文字数が偶数であるものをすべて画面に表示するプログラムを作成します。 例えば、「tutorial point」という文字列が入力された場合、「tutorial」は8文字(偶数)なので出力され、「point」は5文字(奇数)なので出力されません。 解決のアプローチ この問題は、以下の手順で解決できます。 split()関数を使って、入力文字列を空白区切り

  2. Pythonで文字列がパングラムかどうかを判定するプログラムの作成方法

    本記事では、与えられた文字列がパングラムであるかどうかを判定するPythonプログラムの解法とアプローチについて詳しく解説します。 問題の概要 文字列入力が与えられたとき、その文字列がパングラムであるかどうかを判定するPythonプログラムを作成します。 パングラムとは? パングラムとは、英語のアルファベット26文字すべてを少なくとも1回ずつ含む文章や一連の単語のことです。有名な例として「The quick brown fox jumps over the lazy dog」があります。 解法のアプローチ この問題は、以下の手順で解くことができます。 アルファベット全体を表す基準となる文字列