gaya_udonのブログ

学んだことを自分の言葉にすることで理解が深まると思ったので、ブログ開設しました。主にPythonについて学習したことを書こうと思います。

Pythonを使った1~999までの数字を与えると英語に直す関数

こんにちは。

今日はPythonを使った数字を与えると英語に直す関数を作りました。
一見簡単そうな関数ですが作ってみると必要な要素が多く、苦戦しました。
では、書いたプログラムの説明に入ります。
数字を英語にするには規則性を見つけてそれを埋めていくだけでいいのでは?と思ったのですが、そう上手くはいかず、11や12はeleven、twelveと来て、また13~19もthirteenだとかfifteenだとか例外なんですね。
そこで、10番代は規則性の例外になるのでそこのリストも作ろうと考えました。
これにてリストの定義についてはお終いです。
次に苦戦したのが、引数の調べ方です。
引数として与えた数字を分解して考えるのでこれをPythonでどうやって分解しようかと思いました。(Excelの場合は関数のleftなどを使えば一発で済むのに。。。)
そこで、整数のみの割り算や割り算の余りを求める演算子が使えると気が付き3桁の数字を分解することが出来ました。
後は簡単ですね。if文で条件を見てそれに沿った返し分を入れるだけです。このif文も短くなる気はしますが、、、(今の自分ではこれが精いっぱいです。)

def num_to_str(n):
   a = ["one","two","three","four","five","six","seven","eight","nine"]
   b = ["ten","twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"]
   c = ["eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"]

#100の位の計算(nを100で割った整数を求める)
d = n // 100
#10の位の計算(nからd * 100の値を引いた数を10で割った整数を求める)
e = (n - d * 100) // 10
#1の位の計算(nからd * 100の値を引いた数を10で割った余りを求める)
f = (n - d * 100) % 10

if n >= 11 and n <= 19:  #nが11~19の数かを調べる
     return c[n-11]
elif d  == 0:   #100の位があるか調べる
      if  e == 0: #10の位があるか調べる
            return a[f-1]
      elif f == 0: #1の位があるか調べる
            return b[e-1]
      else: 
            return b[e-1] + "-" + a[f-1]
elif e == 0:
     if f == 0:
           return a[d-1] + " hundred"
     else:
           return a[d-1] + " hundred and " + a[f-1]
else:
     if f == 0:
          return a[d-1] + " hundred and " + b[e-1]
     else:
          return a[d-1] + " hundred and " + b[e-1] + "-" + a[f-1]


実行例
num_to_str(903)
>>>"nine hundred and three"
num_to_str(18)
>>>"eighteen"

うまく作動しました!
ありがとうございました。