Python 数字转财务大写数字(二)

今天把功能补全了,可以实现完全的转换功能,包括小数部分。
主要就是增加了用float函数判断输入是否合法,用preTreatment函数将数字分为整数和小数部分,然后用convert函数来对两部分分别进行处理。

import re
digits = list('0123456789')
accDigits = list('零壹贰叁肆伍陆柒捌玖')
units = ['', '拾', '佰', '仟']
sep = list('分角元万亿兆')
acc_conv_dict = dict(zip(digits, accDigits))


def preTreatment(num):
    num = '{:.2f}'.format(float(num))
    partition = num.partition('.')
    iPart, fPart = partition[0], partition[2]
    return iPart, fPart


def convert(num):
    iPart, fPart = preTreatment(num)
    blocks = four_digits_block(iPart)
    iPartStr, fPartStr = '', ''
    for blockIndex in range(len(blocks)):
        block = blocks[blockIndex]
        for index in range(4):
            if not (blockIndex == 0 and index == 2 and block[index] == '1'):
                iPartStr += acc_conv_dict[block[index]]
            if block[index] != '0':
                iPartStr += units[3 - index]
        iPartStr = iPartStr.strip('零')
        iPartStr += sep[len(blocks) - blockIndex + 1]

    iPartStr = re.sub('零+', '零', iPartStr)

    for index in range(len(fPart)):
        fPartStr += acc_conv_dict[fPart[index]]
        if fPart[index] != '0':
            fPartStr += sep[1 - index]
    fPartStr = fPartStr.strip('零')

    if fPartStr == '':
        result = iPartStr + '整'
    else:
        result = iPartStr + fPartStr

    return result


def four_digits_block(iPart):
    fill_counter = 4 - (len(iPart) % 4) if len(iPart) % 4 != 0 else 0
    zero_fill = iPart.zfill(fill_counter + len(iPart))
    blocks = [zero_fill[i * 4:(i + 1) * 4] for i in range(len(zero_fill) // 4)]
    return blocks


while True:
    num = input("请输入数字:")
    if num == '':
        print('欢迎您再次使用,再见!')
        break
    try:
        float(num)
    except:
        print('输入数字不合法!')
        pass

    result = convert(num)
    print(result)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,569评论 0 13
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,718评论 0 5
  • 你是如何阅读一本书的呢?你有什么特殊的阅读习惯或者对你来说很重要的仪式吗? 说起自己的阅读的习惯,很惭愧,没有系统...
    萧萧_健康管理阅读 200评论 0 0
  • 生命,曾经傻傻,只顾漂亮,现在才觉得生命是最重要的。 希望儿子拥有健康的生命,我愿意倾尽所有。 祈祷!
    一心只读窗外事阅读 157评论 0 0
  • 忙碌的父亲无数次因为加班不能准时回来吃饭、女儿生日宴会因为突然的开会而耽误……一通通电话的那头,是一次次失落黯然的...
    万宽影视阅读 370评论 0 0

友情链接更多精彩内容