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
- num mod 1000 が0でない場合:
- 最後に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配列の組み合わせです。
-
Pythonで文字列内の単語を逆順に並べ替える方法
Pythonでは、split()メソッドとreversed()関数を組み合わせることで、文字列内のすべての単語を簡単に逆順にすることができます。この記事では、具体的な手順とサンプルコードを通じて、その実装方法を解説します。 やりたいこと まず、入力と出力のイメージをサンプルで確認しましょう。 入力: string = I am a python programmer 出力: programmer python a am I 別の例も見てみます。 入力: string = tutorialspoint is a educational website 出力: website educatio
-
Pythonのbin()関数の使い方:10進数を2進数に変換する方法
Pythonのbin()関数は、10進数の整数を2進数(バイナリ)表現の文字列に変換する組み込み関数です。引数には正の整数でも負の整数でも指定できます。構文bin()関数の基本的な構文は以下のとおりです。bin(n) 引数:変換対象となる整数 戻り値:整数またはintオブジェクトを2進数表現した文字列 例外:引数にfloat型(浮動小数点数)を渡すとTypeErrorが発生します次の例では、正の整数と負の整数をそれぞれ2進数に変換しています。結果には「0b」という接頭辞が付き、それが2進数表現であることを示します。使用例n = input(Enter an integer :") d