Python TIPS上一道關於人民幣金額小寫轉大寫的題

僅適用於億元以下,大家可以給我指出錯誤

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date    : 2017-06-09
# @Author  : Bob Liao ([email protected])
# @Link    : https://github.com/coderchaser
# @Version : python3.4

#創建大小寫轉換字典
num_dic={
    # 1 : "壹",
    # 2 : "貳",
    # 3 : "叄",
    # 4 : "肆",
    # 5 : "伍",
    # 6 : "陸",
    # 7 : "柒",
    # 8 : "捌",
    # 9 : "玖",
    # 0 : "零"
    u"1": u"壹",
    u"2": u"貳",
    u"3": u"叄",
    u"4": u"肆",
    u"5": u"伍",
    u"6": u"陸",
    u"7": u"柒",
    u"8": u"捌",
    u"9": u"玖",
    u"0": u"零"
}
#將輸入金額分組,從最低位開始四位分組,最後一組可以少於四位
def group(num_str) :
    group_list=[]
    i=len(num_str)
    while i>=4 :
        group_list.append(num_str[i-4:i])
        i-=4
    if i!=0 :
        group_list.append(num_str[:i])
    #保證順序輸出
    group_list.reverse()
    return group_list
#原始讀函數,數字必須全部轉化爲字符串
def read_four(num_four) :
    #讀四位分組
    gewei=""
    shiwei=""
    baiwei=""
    qianwei=""
    num_len=len(num_four)
    #當傳入的數字爲0000時num_len會變成1,會發生list越界
    if num_four[-1]!=u'0' :
        if num_four[-2]!=u'0' :
            gewei=num_dic[num_four[-1]]
        else :
            gewei=u"零"+num_dic[num_four[-1]]
    if num_four[-2]!=u'0' :
        if num_four[-3]!=u'0' :
            shiwei=num_dic[num_four[-2]]+u"拾"
        else :
            shiwei=u"零"+num_dic[num_four[-2]]+u"拾"
    if num_four[-3]!=u'0' :
        if num_four[-4]!=u'0' :
            baiwei=num_dic[num_four[-3]]+u"佰"
        else :
            baiwei=u"零"+num_dic[num_four[-3]]+u"佰"
    if num_four[-4]!=u'0' :
        qianwei=num_dic[num_four[-4]]+u"仟"
    return qianwei+baiwei+shiwei+gewei
def read_three(num_three) :
    #讀三位分組
    gewei=""
    shiwei=""
    baiwei=""
    if num_three[-1]!=u'0' :
        if num_three[-2]!=u'0' :
            gewei=num_dic[num_three[-1]]
        else :
            gewei=u"零"+num_dic[num_three[-1]]
    if num_three[-2]!=u'0' :
        if num_three[-3]!=u'0' :
            shiwei=num_dic[num_three[-2]]+u"拾"
        else :
            shiwei=u"零"+num_dic[num_three[-2]]+u"拾"
    if num_three[-3]!=u'0' :
        baiwei=num_dic[num_three[-3]]+u"佰"
    return baiwei+shiwei+gewei
def read_two(num_two) :
    #讀二位分組
    gewei=""
    shiwei=""
    if num_two[-1]!=u'0' :
        if num_two[-2]!=u'0' :
            gewei=num_dic[num_two[-1]]
        else :
            gewei=u"零"+num_dic[num_two[-1]]
    if num_two[-2]!=u'0' :
        if num_two[-2] ==u'1' :
            shiwei=u"拾"
        else :
            shiwei=num_dic[num_two[-2]]+u"拾"
    return shiwei+gewei
def read_one(num_one) :
    #讀一位分組
    if num_one!=u'0' :
        return num_dic[num_one]
    else :
        return ""
#建立調用字典關係
call_read={
    1 : read_one,
    2 : read_two,
    3 : read_three,
    4 : read_four
}
def read(num) :
    #將數字int轉化爲字符串
    #金額不可以像如下形式:
    #       0100
    #Python3會將0開頭的數字
    #識別爲8進制,一般人不會
    #這樣寫金額,不予考慮
    num_str=str(abs(num))
    #分組
    group_list=group(num_str)
    read_part=[]
    if num<0 :
        read_part.append(u'負')
    for i in group_list :
        len_part=len(i)
        read_part.append(call_read[len_part](i))
        if group_list.index(i)== 0 and len(group_list)>1 :
            read_part.append(u'萬')
    read_part.append(u'圓')
    print("".join(read_part))

# num=int(input('Your Number: '))
# print(num)
read(90901001)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章