Python:阿拉伯数字转换为中文大写数字(金额的读数规则)

萌萌帮班里同学做了一个python的编程作业,正好回顾一下python基础知识,以下源码和思考过程,代码全部原创。
IDE:pycharm
python版本:python3.7

'''
实验目的:在银行的日常业务中,常常需要用到将阿拉伯数字转换为中文大写数字的功能。在这次实验,你将编写一个程序,将用户输入的阿拉伯数字代表的金额,转换为大写数字。
程序运行过程:
1.	提示用户输入金额的范围并接收用户输入的金额
2.	将用户输入的金额转换为中文大写并输出
3.	询问用户是否退出程序
实验思路:
1.	通过定义一个字典进行阿拉伯数字与大写中文的对比储存
2.	将用户的输入首先分割为整数与小数部分分别进行处理
3.	整数部分可以分割为以 4 位数字为一组的列表来进行转换处理,这样便于进行
(兆,亿,万,圆)。的单位处理
'''
dic_num=[{'1':'壹','2':'贰','3':'叁','4':'肆','5':'伍','6':'陆','7':'柒','8':'捌','9':'玖','0':'零'},'拾', '佰', '仟', '万']
figure=['圆','万','亿','兆']

#小数部分字符串
def data_num_split(input_num):
    '''
    整个金额分割函数
    :return: 小数部分和整数部分
    '''
    j=0
    if '.'not in input_num:
        integer=input_num
        decimals=''
    else:
        for i in input_num.split("."):
            if j==0:
                # print(i)
                integer=i
                j+=1
            else:
                # print(i)
                decimals=i

    return integer[::-1],decimals

def groupful_num():
    num_group1 = []
    num_group2 = []
    count = 0
    while True:
        for i in integer:
            count += 1
            num_group1.append(i)
            if count % 4 == 0:
                # print(num_group1)
                num_group2.append(num_group1)
                # money_cn = func(num_group2) + '圆' + money_cn
                num_group1 = []
        else:
            if num_group1 not in num_group2 and len(num_group1)!=0:
                num_group2.append(num_group1)
                # money_cn = func(num_group2) + '圆' + money_cn
                break
            else:
                break
    return num_group2

def integer_part(integer):
    '''
        整数部分
        :return:
        '''
    # integer=integer[::-1]
    if integer == '0':
        return '零圆'
    answer=''

    count=0
    for num_group in groupful_num():
        answer=read_num(num_group)+figure[count]+answer
        count+=1
    # print(answer)
    return answer

def read_num(b):
    ns = ''
    for x in range(1, len(b)):
        num = dic_num[0][b[x]]  # 转换大小写
        word = num + (dic_num[x] if b[x] != '0' else '') 
        # 如果字符是0,添加一个''
        ns = word + ns  # 叠加

    return ns + (dic_num[0][b[0]] if b[0] != '0' else '')

def decimals_part(decimals):
    '''
    小数部分
    :return:
    '''
    new_deciamls = ''
    for i in range(len(decimals)):

        if i == 0:

            new_deciamls += dic_num[0][decimals[i]]
            new_deciamls += '角'
        else:
            new_deciamls += dic_num[0][decimals[i]]
            new_deciamls += '分'
    else:
        new_deciamls += '整'
    return new_deciamls
#主函数
i =1
while i==1:
    input_num=input("请输入不超过一万兆的金额,小数部分不超过两位:")
    integer = data_num_split(input_num)[0] # 整数部分字符串分割
    decimals = data_num_split(input_num)[1]
    while len (decimals)>=3:
        break
    else:
        print(integer_part(integer), decimals_part(decimals))
        if input("是否继续转换?")=='否':
            i=0
            print("谢谢使用!")
            break

  • 首先分割字符串,分为整数部分和小数部分
  • 整数部分,最后出一个bug,整数部分如果整四位的话,四位一组函数会在最后添加一个空集(因为空集不存在于group_2中)所以判断条件添加了一个判断group_1是否为空
  • 以小数点”.”为标志用split函数分割字符串为两部分,分别保存
  • 小数部分判断位数不超过2位,可为空
  • N个小组—:num_group1,存储四位数字(字符串格式),最后一组数字可能不够四位,也可能为空,空的数组不能存,不然会数据越界,因为空没有对应的字典
  • 一个大组:num_group2,元素为四位数字的小组
  • append函数在数组最后添加元素,
  • 数组内容可更改,字符串内容不可更改,每次更改字符穿都是新建一个新的字符串,然后用字符串名字的指针指向新的字符串
  • 整数部分调用grouoful_num和read_num
  • 因为是从头向后读取,根据正常读数字习惯,将整数部分前后颠倒
  • 然后以小组形式转换大小写,在字符串头部添加新的字符
  • 直接在answer=new+answer就在头部添加了
  • continue函数跳出当前循环,然后进入当前循环的下一次循环
  • break函数跳出当前循环,进入当前循环语句后一句语句

你可能感兴趣的:(Python)