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

Pythonで文がパングラムかどうかを判定するプログラムの作り方

与えられた文がパングラム(パングラム:pangram)であるかどうかを判定するのが、本記事のテーマです。パングラムとは、アルファベットのすべての文字(a〜z)を少なくとも1回は含んでいる単語や文のことを指します。たとえば有名な例として「The quick brown fox jumps over the lazy dog」が挙げられます。

この問題は、Pythonのset()メソッドやリスト操作を組み合わせることで、シンプルに解決できます。

判定条件の例

Input: string = 'abc def ghi jkl mno pqr stu vwx yz'
Output: Yes
// ‘a’から‘z’までのすべての文字を含んでいる

Input: str = 'python program'
Output: No
// ‘a’から‘z’までのすべての文字を含んでいない

アルゴリズムの手順

Step 1: 判定対象となる文字列を作成する。
Step 2: lower() メソッドを使って、文全体を小文字に変換する。
Step 3: 入力文字列を set() に変換し、文中に存在する一意な文字をまとめる。
Step 4: ord() 関数で各文字のASCII値を取得し、アルファベット部分だけを識別する。
Step 5: アルファベット26種類すべてが揃っていればパングラム、そうでなければパングラムではないと判定する。

サンプルコード

以下は、フラグ管理のリストを使ってパングラムを判定する基本的な実装例です。

def checkPangram(s):
    # a〜z の出現状況を記録するリスト(初期値は False)
    lst = [False] * 26

    for c in s.lower():
        if c != " ":
            lst[ord(c) - ord('a')] = True

    # 1つでも False が残っていればパングラムではない
    for ch in lst:
        if ch == False:
            return False
    return True

# ドライバープログラム
str1 = input("Enter The String ::> ")

if checkPangram(str1):
    print('"' + str1 + '"')
    print("is a pangram")
else:
    print('"' + str1 + '"')
    print("is not a pangram")

実行結果

Enter The String ::> abc def ghi jkl mno pqr stu vwx yz
"abc def ghi jkl mno pqr stu vwx yz"
is a pangram

Enter The String ::> python program
"python program"
is not a pangram

より簡潔に書く方法(set を活用)

set()を使うと、コードをさらに短く書けます。標準ライブラリのstringモジュールにあるascii_lowercase(a〜zの文字列)と、入力文を小文字化したものの集合を比較するだけで判定できます。

import string

def is_pangram(s):
    return set(string.ascii_lowercase) <= set(s.lower())

print(is_pangram("the quick brown fox jumps over the lazy dog"))  # True
print(is_pangram("python program"))                               # False

この方法では、集合の包含関係(<=演算子)によって「a〜zのすべての文字が入力文に含まれるか」を一行で確認できます。可読性が高く、実務でもおすすめの書き方です。

まとめ

パングラムの判定は、「小文字に正規化してから、a〜zの26種類すべてが出現しているかを確認する」という流れが基本です。ord()とリストを使った丁寧な実装でも、set()を使った簡潔な実装でも、どちらでも同じ結果が得られます。用途に応じて使い分けてみてください。

  1. 指定された文字列がキーワードであるかどうかを確認するPythonプログラム

    この記事では、指定された文字列がPythonのキーワード(予約語)であるかどうかを判定する方法について解説します。問題の概要与えられた文字列が、Pythonにおけるキーワードであるかどうかを確認する必要があります。キーワードとは、言語によって特別な用途のために予約されている単語であり、変数名や関数名などの識別子として使用することはできません。例えば「if」「for」「while」「def」などはすべてキーワードです。これらの名前を変数に使おうとすると、構文エラーが発生します。解決策:keywordモジュールの活用Pythonには標準ライブラリとしてkeywordモジュールが用意されており、これ

  2. 文字列が空かどうかをチェックするPythonプログラム

    この記事では、与えられた文字列が空であるかどうかを判定するための解決策とアプローチについて解説します。 問題文 文字列が入力として与えられたとき、その文字列が空(空文字列)であるかどうかを判定する必要があります。 Pythonの文字列はイミュータブル(変更不可)な性質を持っているため、文字列に対して何らかの操作を行う際には注意して扱う必要があります。 ここでは、上記の問題を解決するための2つのアプローチを紹介します。 len()メソッドを使用する方法 等価演算子(==)を使用する方法 アプローチ1:len()メソッドを使う方法 len()関数で文字列の長さを取得し、その長さが0であれば空文