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

組み込み関数を使わずにPythonで大文字・小文字の文字数をカウントする方法

はじめに

本記事では、以下の問題に対する解決策について詳しく解説します。

問題文

文字列が与えられたとき、組み込みの文字判定関数を使用せずに、その文字列に含まれる大文字と小文字の数をそれぞれカウントする必要があります。

通常、この問題はPythonに標準で用意されている islower()isupper() を使えば簡単に解決できます。しかし今回は「これらの文字判定関数を使わない」という制約があるため、文字のASCIIコード値を活用したアプローチを採用します。

ord() 関数を使うことで、文字列内の各文字のASCIIコード値を取得できます。取得した値が小文字の範囲(97〜122)か、大文字の範囲(65〜90)かを数値比較することで、大文字・小文字を判別できます。具体的な実装は以下の通りです。

サンプルコード

def upperlower(string):
    upper = 0
    lower = 0
    for i in range(len(string)):
        # 小文字の場合
        if (ord(string[i]) >= 97 and
                ord(string[i]) <= 122):
            lower += 1
        # 大文字の場合
        elif (ord(string[i]) >= 65 and
                ord(string[i]) <= 90):
            upper += 1
    print('Lower case characters = ' + str(lower))
    print('Upper case characters = ' + str(upper))

# 実行コード
string = 'TutorialsPoint'
upperlower(string)

出力結果

Lower case characters = 12
Upper case characters = 2

入力文字列「TutorialsPoint」は全14文字で構成されており、そのうち大文字は「T」と「P」の2個、残りの12個がすべて小文字であることが確認できます。

すべての変数はローカルスコープ内で宣言されており、その参照関係は上図のメモリイメージのように視覚的に表すことができます。

ASCIIコードの仕組み

ASCIIコードでは、英字の大文字 A〜Z には 65〜90、小文字 a〜z には 97〜122 の連続した数値が割り当てられています。この性質を利用すれば、複雑な条件分岐やライブラリに頼ることなく、シンプルな数値比較だけで文字種の判定が可能になります。

まとめ

本記事では、組み込みの文字判定関数に頼らず、ord() 関数で取得したASCIIコード値の比較によって、文字列中の大文字・小文字の数をカウントする方法を学びました。文字コードの基礎的な理解を深める良い練習になるので、ぜひ実際に手を動かして試してみてください。

  1. セットを使って文字列内の母音の数をカウントするPythonプログラム

    本記事では、Pythonを使って文字列内に含まれる母音の数をカウントする方法について解説します。セット(set)を活用した効率的な実装を中心に、初心者の方にもわかりやすく説明していきます。 問題の概要 問題文:任意の文字列が与えられたとき、その文字列に含まれる母音の数をセットを使って数えます。 基本的なアプローチとしては、文字列全体を先頭から順に走査し、各文字が母音であるかどうかを判定します。母音であればカウントを1ずつ増やしていき、最終的な合計を出力します。 実装例 def vowel_count(str_): count = 0 # 母音をセットとして定義 vowe

  2. 組み込み関数を使わずに大文字・小文字をカウントするPythonプログラム

    この記事では、文字列に含まれる大文字と小文字の数を数える問題を、組み込みの文字判定メソッドに頼らずに解くための考え方と実装方法を解説します。 問題の概要 文字列が入力として与えられたとき、その中に含まれる大文字の数と小文字の数をそれぞれ求める必要があります。 ここでは、isupper() や islower() のような文字判定メソッドは使わず、組み込み関数 ord() を利用して各文字のASCII値を調べることで判定を行います。 ASCII値による判定の考え方 ASCIIコードでは、英字は次のような範囲に割り当てられています。 小文字(a〜z):97〜122 大文字(A〜Z):65〜90