1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > Python:阿拉伯数字转换为中文大写数字(金额的读数规则)

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

时间:2023-10-28 01:05:15

相关推荐

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=0if '.'not in input_num:integer=input_numdecimals=''else:for i in input_num.split("."):if j==0:# print(i)integer=ij+=1else:# print(i)decimals=ireturn integer[::-1],decimalsdef groupful_num():num_group1 = []num_group2 = []count = 0while True:for i in integer:count += 1num_group1.append(i)if count % 4 == 0:# print(num_group1)num_group2.append(num_group1)# money_cn = func(num_group2) + '圆' + money_cnnum_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_cnbreakelse:breakreturn num_group2def integer_part(integer):'''整数部分:return:'''# integer=integer[::-1]if integer == '0':return '零圆'answer=''count=0for num_group in groupful_num():answer=read_num(num_group)+figure[count]+answercount+=1# print(answer)return answerdef 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 =1while i==1:input_num=input("请输入不超过一万兆的金额,小数部分不超过两位:")integer = data_num_split(input_num)[0] # 整数部分字符串分割decimals = data_num_split(input_num)[1]while len (decimals)>=3:breakelse:print(integer_part(integer), decimals_part(decimals))if input("是否继续转换?")=='否':i=0print("谢谢使用!")break

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。