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

Pythonで整数を英語の単語(英字表記)に変換する方法を解説

はじめに

この記事では、0から231−1までの範囲にある任意の整数を受け取り、それを英語の単語表記に変換するPythonプログラムを紹介します。例えば、入力が「512」であれば、出力は「Five Hundred Twelve」となります。

アルゴリズムの考え方

数値を単語に変換するには、以下の手順で処理を進めます。

  • 1から19までの英単語を格納するリスト less_than_20 を定義します。
  • 「Twenty」「Thirty」など10の位の単語を格納するリスト tens を定義します。
  • 「Thousand」「Million」「Billion」を格納するリスト thousands を定義します。
  • 999以下の数値を単語に変換する補助関数 helper() を作成します。引数として n を受け取ります。

helper() 関数のロジック

  • n が 0 の場合は空文字列を返します。
  • n が 20 未満の場合は less_than_20[n] と空白を返します。
  • n が 100 未満の場合は tens[n // 10] と空白、さらに helper(n % 10) の結果を連結して返します。
  • それ以外の場合は less_than_20[n // 100] と「Hundred」、さらに helper(n % 100) の結果を連結して返します。

メインメソッドのロジック

  • num が 0 の場合は「Zero」を返します。
  • ans を空文字列、i を 0 で初期化します。
  • num が 0 より大きい間、以下を繰り返します。
    • num % 1000 が 0 でない場合、ans = helper(num % 1000) + thousands[i] + 空白 + ans とします。
  • 最後に ans を返します。

それでは、実際のコードを見て理解を深めましょう。

実装例

class Solution(object):
    less_than_20 = ["", "One", "Two", "Three", "Four", "Five", "Six",
    "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen",
    "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen",
    "Nineteen"]
    tens = ["","Ten", "Twenty", "Thirty", "Forty", "Fifty", "Sixty",
    "Seventy", "Eighty", "Ninety"]
    thousands = ["", "Thousand", "Million", "Billion"]

    def numberToWords(self, num):
        if num == 0:
            return "Zero"
        ans = ""
        i = 0
        while num > 0:
            if num % 1000 != 0:
                ans = self.helper(num % 1000) + Solution.thousands[i] + " " + ans
            i += 1
            num //= 1000
        return ans.strip()

    def helper(self, n):
        if n == 0:
            return ""
        elif n < 20:
            return Solution.less_than_20[n] + " "
        elif n < 100:
            return Solution.tens[n//10] + " " + self.helper(n % 10)
        else:
            return Solution.less_than_20[n // 100] + " Hundred " + self.helper(n % 100)

ob = Solution()
print(ob.numberToWords(512))
print(ob.numberToWords(7835271))

入力

512
7835271

出力

Five Hundred Twelve
Seven Million Eight Hundred Thirty Five Thousand Two Hundred Seventy One

まとめ

このアルゴリズムでは、数値を3桁ずつ区切って処理することで、大きな数値でも効率よく英語表記へ変換できます。再帰的な helper() 関数によって百の位・十の位・一の位を段階的に分解し、thousands リストを使って桁の大きさ(Thousand、Million、Billion)を付与しています。計算量は数値の桁数に依存し、非常にシンプルかつ高速な手法です。

  1. PythonのTkinterプログラミング入門:GUIアプリケーション開発の基本

    TkinterとはTkinterは、Pythonに標準で付属しているGUI(グラフィカルユーザーインターフェース)ライブラリです。PythonとTkinterを組み合わせることで、手軽かつスピーディーにGUIアプリケーションを構築できます。Tkinterは、Tk GUIツールキットへの強力なオブジェクト指向インターフェースを提供しており、ボタンやラベルなどの部品(ウィジェット)を直感的に配置できるのが特徴です。GUIアプリケーション作成の基本手順Tkinterを使ったGUIアプリケーションの作成はとてもシンプルです。基本的には、以下の手順に従うだけで実装できます。Tkinterモジュールをイン

  2. PythonのTurtleグラフィックス入門!基本メソッド一覧と図形描画サンプルコード集

    Turtle(タートル)はPythonに標準搭載された特殊な機能で、専用の描画ウィンドウ上に簡単に図形を描くことができるモジュールです。 使い方はとてもシンプルです。まずturtleモジュールをインポートし、次にウィンドウ(Screen)を作成、その後タートルオブジェクトを生成します。あとは各種メソッドを呼び出すだけで、キャンバス上に自由に描画できます。この記事では、よく使われるメソッドの一覧表と、正方形・星・六角形などの具体的な描画例をサンプルコード付きで解説します。 主なTurtleメソッド一覧 メソッド パラメータ 説明 Turtle() なし 新しいタートルオブジェクトを作成