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

Pythonで整数を英語の単語に変換する方法を解説

0から231 − 1までの範囲にある任意の整数を、英語の単語表現に変換することを考えてみましょう。たとえば、数値が512であれば、結果は「Five hundred twelve」となります。

解決のためのアプローチ

この問題を解くには、以下の手順に従います。

  • まず「less_than_20」というリストを定義します。ここには1から19までのすべての英単語を格納します。
  • 次に「tens」という配列を用意し、Twenty(20)、Thirty(30)などNinety(90)までの十の位の単語を格納します。
  • さらに「thousands」という配列を作り、Thousand(千)、Million(百万)、Billion(十億)を格納します。
  • 引数としてnを受け取る「helper()」という関数を定義します。
  • nが0の場合は空文字列を返します。
  • nが20未満の場合は less_than_20[n] + 空白 を返します。
  • nが100未満の場合は tens[n/10] + 空白 + helper(n mod 10) を返します。
  • それ以外の場合は less_than_20[n/100] + "Hundred" + helper(n mod 100) を返します。

メインメソッドでの処理

  • numが0の場合は「Zero」を返します。
  • ans := 空文字列、i := 0 と初期化します。
  • num > 0 の間、以下を繰り返します。
    • num mod 1000 が0でない場合:
      • ans := helper(num mod 1000) + thousands[i] + 空白 + ans
      • num := num / 1000
  • 最後に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桁ごとに区切って再帰的に処理することで、大きな数値でも効率よく英語表記へ変換できます。ポイントは、20未満・100未満・それ以上の3段階に分けて処理するhelper関数と、Thousand・Million・Billionといった桁の単位を管理するthousands配列の組み合わせです。

  1. Pythonで文字列内の単語を逆順に並べ替える方法

    Pythonでは、split()メソッドとreversed()関数を組み合わせることで、文字列内のすべての単語を簡単に逆順にすることができます。この記事では、具体的な手順とサンプルコードを通じて、その実装方法を解説します。 やりたいこと まず、入力と出力のイメージをサンプルで確認しましょう。 入力: string = I am a python programmer 出力: programmer python a am I 別の例も見てみます。 入力: string = tutorialspoint is a educational website 出力: website educatio

  2. Pythonのbin()関数の使い方:10進数を2進数に変換する方法

    Pythonのbin()関数は、10進数の整数を2進数(バイナリ)表現の文字列に変換する組み込み関数です。引数には正の整数でも負の整数でも指定できます。構文bin()関数の基本的な構文は以下のとおりです。bin(n) 引数:変換対象となる整数 戻り値:整数またはintオブジェクトを2進数表現した文字列 例外:引数にfloat型(浮動小数点数)を渡すとTypeErrorが発生します次の例では、正の整数と負の整数をそれぞれ2進数に変換しています。結果には「0b」という接頭辞が付き、それが2進数表現であることを示します。使用例n = input(Enter an integer :") d