效果图:

实现代码:

money = float(input("Please input the money:"))
cop = int(money)
Num = ['零','壹','贰','叁','肆','伍','陆','柒','捌','镹']
#用于存转换后的汉字
UnitZ = ['','仟','佰','十']
#存转换需要的单位(4数字一循环)
Integer = []
#存整数部分每一位数字
Decimal = []
#存小数部分每一位数字(一共两位,精确到分)
Zheng = cop
Xiao = 0.00
#初始化小数,如果不手工指定精确2位则默认精确一位
End = []
if('.' in str(money)):#判断输入有没有小数,没有则使用初始化,有则重新计算Xiao变量(仔细读代码可以看出这个if是有问题的,本来是想没有则用初始化Xiao的值,但现在才发现并木有,那就限制下必须输入小数部分吧,在用户输入加个友情提示:必须精确到小数点后两位~)
Xiao = money - cop
for i in range(2,4):#小数部分的存储格式为0.XX,前面有一个“0”和一个“.”所以要空过去前两个字符
a = str(Xiao)
Decimal.append(a[i])
for i in str(Zheng):
Integer.append(i)
# print(Integer)
# print(Decimal)
a = 0
b = 0
Ling = 1
for i in Integer:
i = int(i)
c = len(Integer)
a += 1
b = ((a + 4)-(c % 4)) % 4#前面的a+4是考虑到位置刚开始可能小于全部长度余4的值,比如索引a+1(当前读取数字的第几位)-(c数字总长度%4)得到当前位为四位循环体(千百十空)的第几位(用于判断转换后数字后面跟的单位)
if (i != 0 and Ling == 0):
End.append('零')
Ling = 1
if(i != 0 and Ling != 0):
End.append(Num[i])
End.append(UnitZ[b])
if(i == 0):
Ling = 0
#我判断连续零的方法:当前为零则计数器为0,这个是固定的。如果当前不为零并且计数器为零,说明该位上一位为零而这位不是零则在该位前面补个零(一定要在该位数字变换前插零),巧妙之处在于‘零’这个变换不是由数字位0来决定是否插入(这样不管几个0都不会随意插‘零’),而交由0后面的非0来插入(0与非0之间肯定一个‘零’,不管非0前有几个0)
#多说一句,三条if应该可以合并成一个if/elif语句,我没试,想这个法子就好头疼啊,一下也不想看了,不改了,你想改就改吧
if (c - a == 8): End.append('亿')#每四位插一个大单位,不足四位也不用担心会乱插
if (c - a == 4): End.append('万') End.append('元')
m = int(Decimal[0])
End.append(Num[m])
End.append('角')
n = int(Decimal[1])
End.append(Num[n])
End.append('分')
end = ''.join(End)
print(end)
#最后的元和角、分由于位数固定,懒得再给搞循环了,随便手动插一下就算完了,不足之处在于,其实程序可以简单不少,完全可以把整数和小数放在一起,补个标志位啥的或者计数器记下位数之类的,然后一套循环直接做出来,我觉得挺好,留给你当作业了,我不改了,交给你了

解析:
思路很简单,把输入的数字分成两部分,整数和浮点数(单整数则小数部分初始化为0)。然后用两个列表把整数和小数部分分别存起来,然后创建个列表把数字对应的大写汉字存起来,用于一对一转换。数字转成汉字完成了,另一个就是单位问题,很巧,中文将四位数字为一组,分为万、亿、兆,我设置的上限是亿(兆在现实中也用不到吧。。。),然后四位中都是千、百、十。确定好循环及千百十对应的位置关系,当转换完一个数字就把千百十加进一个,每逢四位加一个大单位“万、亿”。另一个需要注意的是零,比较特殊,单个零不跟单位“千百十”,多个零连续则合成一个零,这里我通余4和总长度跟现长度的差进行调试了半天才解决。
我觉得比较重要的一个思路就是我一开始就决定了用列表的形式存储最后的结果,然后内容是按字符逐个添加。由于有连续零等多个不确定列表长度的因素存在,所以在构建列表时是采用的append方法往最后面加,比较方便,最后把列表一转字符串就得到结果了。
方向很重要!如果用开始就用字符串来存可能就不会那么简单了,程序可以更简单的,包括里面的一些我临时用来计数的变量等,我觉得是可以再简化简化的,但在测试无误后我又不想再费时间改了,有点晚啊,改好麻烦啊╮(╯▽╰)╭,就这样吧,谁看了想改自己再改进吧。
好久没写博客了,也是因为最近做的练习少了,一方面因为最近在看Python基础教程书,没做到什么练习(看基础书好无聊啊),另一方面是现在在花时间学英语,还准备考个英语六级啊,最近一直在看英文小说,看完几个短篇的了,最近在看《傲慢与偏见》,加油啊!

Python学习之--数字转人民币读法(解决问题的方法很重要)的更多相关文章

  1. python学习之数字

    数字python中的数字比较典型,典型在可以表示很小的数,也可以表示很大的数,c语言的数字类型如果表示很大的数的话,可能会报溢出错误,但是python不会,python 数字类型的完整工具包括整数和浮 ...

  2. Python学习day08-python进阶(2)-内置方法

    Python学习day08-python进阶(2)-内置方法 列表数据类型内置方法 作用 描述多个值,比如爱好 定义方法       xxxxxxxxxx 2         1 hobby_list ...

  3. Python学习_02_数字和运算

    python具有强大的科学运算功能,python由于支持更加强大的面向对象和动态特性,相比R语言.matlab.mathmatic等传统的科学计算工具具有非常大的优势. Python的数字 pytho ...

  4. Python学习笔记-数字,列表,元祖,切片,循环

    数字 1,加减乘除:+,-,*,/ 2,平方:** 3,立方:**3 4,字符串转换:str(数字) 5,浮点数:带小数点  0.2 Python编程建议 import this >>&g ...

  5. 数字转人民币读法-python3

    """ 2 把一个浮点数分解成证书备份和小数部分 3 """ 4 def divide(num): 5 intnum = int(num) ...

  6. Mooc中国大学Python学习笔记--数字类型及操作

    整数类型 只需知道整数无限制,pow(),4进制表示形式 与数学中整数的概念一致 --可正可负,没有取值范限制 --pow(x,y)函数:计算x^y,想算多大算多大 -十进制:10 -二进制,以0b或 ...

  7. [Python学习笔记] 数字类型及操作

    数字类型 整数类型 十进制:1110,-123 二进制:以0B或0b开头 0b110,-0B101 八进制:以0O或0o开头 0o123,-0O567 十六进制:以0X或0x开头 0x555,-0X8 ...

  8. Python学习笔记-数字类型

    如何定义一个数字类型 定义var1为一个INT类型,所以在5/3 输出的是 1. var1 = 5 var1=var1/3 print var1 定义var1为一个INT类型,因为var1是INT类型 ...

  9. Python学习-猜数字游戏

    菩萨蛮·黄鹤楼 茫茫九派流中国,沉沉一线穿南北.烟雨莽苍苍,龟蛇锁大江. 黄鹤知何去,剩有游人处.把酒酹滔滔,心潮逐浪高! --coding:UTF-8-- import random secret ...

随机推荐

  1. ubuntu 没有桌面 没有图标,只剩下壁纸

    sudo apt-get update sudo apt-get install --reinstall ubuntu-desktop sudo apt-get install unity sudo ...

  2. PAT甲级——A1127 ZigZagging on a Tree【30】

    Suppose that all the keys in a binary tree are distinct positive integers. A unique binary tree can ...

  3. Spring Boot Redis Cluster实战

    添加配置信息 spring.redis: database: 0 # Redis数据库索引(默认为0) #host: 192.168.1.8 #port: 6379 password: 123456 ...

  4. <Python基础>列表的基本操作

    s = 'abCDeFg aBcDea' s1 = s.split('D',3) #以s1列表为例 print(s1) #增 s1.append('foxabc') #返回值None,直接增到列表的最 ...

  5. [WPF自定义控件]?Window(窗体)的UI元素及行为

    原文:[WPF自定义控件]?Window(窗体)的UI元素及行为 1. 前言 本来打算写一篇<自定义Window>的文章,但写着写着发觉内容太多,所以还是把使用WindowChrome自定 ...

  6. 2019-7-1-Roslyn-让编译时候-Message-内容默认输出

    title author date CreateTime categories Roslyn 让编译时候 Message 内容默认输出 lindexi 2019-07-01 14:16:59 +080 ...

  7. [NOIP2019模拟赛]HC1147 时空阵

    题目描述: 幽香这几天学习了魔法,准备建造一个大型的时空传送阵. 幽香现在可以在幻想乡的n个地点建造一些传送门,如果她建造了从地点a与地点b之间的传送门,那么从a到b和从b到a都只需要单位1的时间. ...

  8. 【期望DP】[zoj3329]One Person Game

    题描: 有三个均匀的骰子,分别有k1,k2,k3个面,初始分数是0, 当掷三个骰子的点数分别为a,b,c的时候,分数清零,否则分数加上三个骰子的点数和, 当分数>n的时候结束.求需要掷骰子的次数 ...

  9. php实现在不同国家显示网站的不同语言版本

    首先,你的网站本身要拥有多个语言版本.不然的话你就只能用JS去转化了. 1.通过ip去定位,这个要引用到第三方的接口进行数据的完整返回,但是不知道是我的网速太慢还是什么原因,个人觉得这个方法会卡顿: ...

  10. js正则笔记

    //内容 var innerhtml = $('.reading_box_m').html().replace(/ tag="?[一二三四五六七八九十]+"?/ig, " ...