学习
实践
活动
工具
TVP
写文章

人民币大写转换中的数据思维

今天我们来实现一个人民币大写转换的程序,一方面工作上常有审批、报销的需求;另一方面是当作一个教学案例。

如果单纯就应用谈应用,我们直接上网随意打开一个转换网站就是了。或者用Python做个窗口程序,背后偷偷调用网页的结果效果也挺好。但是,拿来主义固然讨巧,却对网络有依赖性。而且,如果大家都等着拿现成的应用来调用,不就陷入了类似OS死锁的状态吗?

其实这个程序对思维训练和编码实践,都是非常好的案例。在我们中学阶段,用计算思维越来越被重视今天,非常适合做为列表、字典、循环、函数这一部分的综合训练。学完了函数,做这个小项目,绝对是温故知新的绝佳案例。

好了,需求不说了,找个样板:

思路:

我们假定小数是两位。

一、数据结构设计:

列表:个位权重开头,往后写到足够用,分别对应数位名称

['圆','拾','百','千','万','拾','百','千','亿','拾','百','千','万','拾','百','千','兆']

字典:拿到了数字就得到了汉字,方便索引{'0':'零','1':'壹','2':'贰','3':'叁','4':'肆','5':'伍','6':'陆','7':'柒','8':'捌','9':'玖'}

二、小数部分处理:

拿出数字来字典转换后与角和分拼接字符串即可。

三、整数部分处理:

翻转成个位开头对应元,十位对应拾,百位对佰,依次类推。然后逆序组合输出。

四、多零与跨万处理:

这一部分耗时最多,一开始总想着加一个标志位,看看是不是第一个“零”,要不是第一个就不加了。后来发现为像1002345这种还少个万字,万字可以通过判断下标是不是4的余数来解决,包括亿字也能解决。那么就还是“零”的问题了,折腾半天,决定这样做:

遇到0,看是否万、亿位,是的话调万或者亿字,否的话加零,但保证循环过程中最后只有一个零。最后通过一个replace函数把出问题的字符进行替换。目前经过测试,正常使用了。

给大家画个草图:

代码:

结果:

代码:

# -*- coding: utf-8 -*-

def Num2Money(num):

result=''

format_word = ["元","拾","百","千","万","拾","百","千","亿","拾","百","千","万","拾","百","千","兆"]

dic= {"0":"零","1":"壹","2":"贰","3":"叁","4":"肆","5":"伍","6":"陆","7":"柒","8":"捌","9":"玖"}

rNum=reverseNum(num)

for i in range(len(rNum)-1,-1,-1):

seq=rNum[i]

if seq!='0':

result=result+dic[seq]+format_word[i]

else:

if i%4==0:#万、亿等位

result=result+format_word[i]

else:

if result[-1]!='零':

result=result+'零'

if '.' in num:

result=result+dic[num[-2]]+'角'+dic[num[-1]]+'分'

else:

result=result+'整'

result=result.replace('零万','万').replace('亿万','亿零').replace('零零','零').replace('零元','元')

return result

def reverseNum(n):

if '.' in n:

s=n.split('.')[0]

else:

s=n

l = list(s) #模拟全部入栈

result = ""

while len(l)>0:

result += l.pop() #模拟出栈

return result

while 1:

ipt=input('请输入金额:\n')

print(Num2Money(ipt)

代码下载:

回复

getMoney

总结:

1、数据结构很重要,决定了能否方便读取、存入、联合。

2、思路不能僵化,不能事前通盘考虑,亦可事后修补。

3、先完成主体功能,再逐步细化,重点在基本算法。

如果依然后bug,欢迎留言告知。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180531G0Q2M000?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券