ひきメモ

2008-02-04

[]整数を漢数字に変換

#!python
# vim:fileencoding=utf-8

def num2kanji(num):
    KNUM = [u"", u"", u"", u"", u"", u"", 
            u"", u"", u"", u""]
    DIGIT1 = (u"", u"", u"", u"")
    DIGIT2 = (u"", u"", u"", u"", u"")
    
    try:
        num = int(num)
    except ValueError:
        raise ValueError("not an integer")
    max = 10000 ** len(DIGIT2) - 1
    if not(0 <= num < max):
        raise ValueError("not in (0-%d)" % max)

    if num == 0: return u""

    str_num = str(num)
    knum = []
    for i in xrange(((len(str_num) + 3) / 4)):
        sn = str_num[-1-i*4:-5-i*4:-1]
        if sn != "0000": 
            knum.append(DIGIT2[i] + " ")
            for j, n in enumerate(map(int, sn)):
                if n != 0:
                    knum.append(DIGIT1[j])
                    if not(n == 1 and j):
                        knum.append(KNUM[n])
    knum.reverse()
    return "".join(knum).rstrip()

while 1:
    try:
        print num2kanji(raw_input(">> "))
    except ValueError, e:
        print e
    except EOFError:
        break
>> 0
零
>> 1540001
百五十四万 一
>> 43005421003
四百三十億 五百四十二万 千三
>> 224767477905006
二百二十四兆 七千六百七十四億 七千七百九十万 五千六
>> 60093000611220000769
六千九京 三千兆 六千百十二億 二千万 七百六十九
>> -1
not in (0-99999999999999999999)
>> 1000000000000000000000000000
not in (0-99999999999999999999)
>> 89.97
not an integer

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/yumimue/20080204/1202078287