久しぶりに初心者向けの
講座をしようと思います。

数値に単位をつけるだけの
簡単なプログラムです。

解説動画はこちら



12345のような数値を
1万2345のように
単位をつけるだけの簡単なプログラムです。

出来上がりはこれです。
# 数値を4桁で分割する
def sli_num(st):
    s = str(st)
    return [s[::-1][i:i+4][::-1] for i in range(0, len(s), 4)]

# 数値に単位をつける
def num_unit(num):
    sufs = ('無量大数','不可思議','那由他','阿僧祇','恒河沙',
            '極','載','正','澗','溝','穣','杼','垓','京', '兆', '億', '万', '')
    res = []
    for i,p in enumerate(sli_num(num)):
        res += [p+sufs[(i+1)*-1]] 
    return ''.join(res[::-1])
num_unit(数値)で実行できます。

num_unit(10297540795524400449443986866480693)
102溝9754穣0795杼5244垓0044京9443兆9868億6648万0693
num_unit(6344814611237963971310297540795524400449443986866480693646369387855336)
63無量大数4481不可思議4611那由他2379阿僧祇6397恒河沙1310極2975載4079正5524澗4004溝4944穣3986杼8664垓8069京3646兆3693億8785万5336


関数の中でどんなことをしているのかを
解説します。

1つ目の関数sli_num
# 数値を4桁で分割する
def sli_num(st):
    s = str(st)
    return [s[::-1][i:i+4][::-1] for i in range(0, len(s), 4)]
この関数は入力された数値を
文字列に直して分割します。


戻り値の結果部分見てみると
s = str(1234567890)
[s[::-1][i:i+4][::-1] for i in range(0, len(s), 4)]
['7890', '3456', '12']

入力された数値を4桁で区切って
文字列のリストとして返しています。


str関数で入力値を文字列に直した後
[::-1]で文字列をひっくり返すことができます。
s[::-1]
'0987654321'

そうすれば、後ろから区切って
とることができます。

スライス機能を用いて
ひっくり返した数値から4桁ずつ取り
i=0
s[::-1][i:i+4]
'0987'


最後にまた[::-1]でひっくり返して
元に戻します。
s[::-1][i:i+4][::-1]
'7890'

そうすると元の入力値を4桁区切りで
切り取った文字列のリストが出来上がります。

['7890', '3456', '12']

これに単位を付けていきます。

2つ目の関数num_unitでは
1つ目の関数を用いて分割した数値に
単位を付けています。
# 数値に単位をつける
def num_unit(num):
    sufs = ('無量大数','不可思議','那由他','阿僧祇','恒河沙',
            '極','載','正','澗','溝','穣','杼','垓','京', '兆', '億', '万', '')
    res = []
    for i,p in enumerate(sli_num(num)):
        res += [p+sufs[(i+1)*-1]] 
    return ''.join(res[::-1])

あらかじめ単位をリスト値等で作っておき
それと数値を組み合わせた物を
最終的な結果として保持しておきます。

スライス機能では インデックスに
マイナスの値を用いると後ろ側から
値を取得することができます。

sli_numの戻り値は千の位から始まるので
一番末尾は空、続いて万の位、億の位・・・
と言うふうに文字をくっつけていき
最後にひっくり返して文字列のjoinメソッドで
結合して1つの文字列に直しています。

Python言語の中でも
数値と文字列の取り扱いや
リストの操作、for文の使い方などは
よく用いられる部分なので

ここをしっかり覚えておくと
仕事が捗ります。

是非、いろんなプログラムを作って
操作方法に慣れておきましょう。

今回はこれまでです
それでは。