Python学习之--数字转人民币读法(解决问题的方法很重要)
效果图:

实现代码:
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学习之--数字转人民币读法(解决问题的方法很重要)的更多相关文章
- python学习之数字
数字python中的数字比较典型,典型在可以表示很小的数,也可以表示很大的数,c语言的数字类型如果表示很大的数的话,可能会报溢出错误,但是python不会,python 数字类型的完整工具包括整数和浮 ...
- Python学习day08-python进阶(2)-内置方法
Python学习day08-python进阶(2)-内置方法 列表数据类型内置方法 作用 描述多个值,比如爱好 定义方法 xxxxxxxxxx 2 1 hobby_list ...
- Python学习_02_数字和运算
python具有强大的科学运算功能,python由于支持更加强大的面向对象和动态特性,相比R语言.matlab.mathmatic等传统的科学计算工具具有非常大的优势. Python的数字 pytho ...
- Python学习笔记-数字,列表,元祖,切片,循环
数字 1,加减乘除:+,-,*,/ 2,平方:** 3,立方:**3 4,字符串转换:str(数字) 5,浮点数:带小数点 0.2 Python编程建议 import this >>&g ...
- 数字转人民币读法-python3
""" 2 把一个浮点数分解成证书备份和小数部分 3 """ 4 def divide(num): 5 intnum = int(num) ...
- Mooc中国大学Python学习笔记--数字类型及操作
整数类型 只需知道整数无限制,pow(),4进制表示形式 与数学中整数的概念一致 --可正可负,没有取值范限制 --pow(x,y)函数:计算x^y,想算多大算多大 -十进制:10 -二进制,以0b或 ...
- [Python学习笔记] 数字类型及操作
数字类型 整数类型 十进制:1110,-123 二进制:以0B或0b开头 0b110,-0B101 八进制:以0O或0o开头 0o123,-0O567 十六进制:以0X或0x开头 0x555,-0X8 ...
- Python学习笔记-数字类型
如何定义一个数字类型 定义var1为一个INT类型,所以在5/3 输出的是 1. var1 = 5 var1=var1/3 print var1 定义var1为一个INT类型,因为var1是INT类型 ...
- Python学习-猜数字游戏
菩萨蛮·黄鹤楼 茫茫九派流中国,沉沉一线穿南北.烟雨莽苍苍,龟蛇锁大江. 黄鹤知何去,剩有游人处.把酒酹滔滔,心潮逐浪高! --coding:UTF-8-- import random secret ...
随机推荐
- JVM规范
- 记因为电脑名更改而导致sql server一直连接失败
安装的是sql server2016.原先一直用的好好的,直到有一天觉得电脑名称,嗯要改下.改完后,嗯,就忘了. 然后打开sql server,连接失败.一开始以为是sql server配置管理器中的 ...
- wpf问题集锦
一.今天用vs2013新建wpf程序,项目名称命名为MainWindow,一启动就出现错误:类型“MainWindow.MainWindow”中不存在类型名称"App".博主顿时很 ...
- 打开串口(COM)号大于9时报错
使用CreateFile打开串口(COM)号大于9时报错,GetLastError()的值为2. 解决方法: // 把串口名称由 "COMN" 改为 "\\.\COMN& ...
- LeetCode第一题—— Two Sum(寻找两数,要求和为target)
题目描述: Given an array of integers, return indices of the two numbers such that they add up to a speci ...
- Ubuntu Service说明与使用方法
1 什么是Ubuntu的Service 网上很多资料说, service就是linux中随开机自启动的, 并且在后台运行的程序. 个人认为, 至少对于Ubuntu来说, 这个说法是不太准确的, 这只不 ...
- Python-进程(1)
目录 操作系统发展史 穿孔卡片 联机批处理系统 统计批处理系统 单道 多道技术 空间上复用 时间上复用 并行与并发 进程 程序与进程 进程调度 进程的三个状态 就绪态 运行态 阻塞态 同步和异步 阻塞 ...
- python相关软件安装流程图解————————python安装——————python-3.7.1-amd64
首先查看自己的系统版本 是32位的还是64位的 https://www.python.org/downloads/windows/ —————————python下载安装 开始———————————— ...
- go的单引号、双引号、反引号的区别
Go语言的字符串类型string在本质上就与其他语言的字符串类型不同: Java的String.C++的std::string以及Python3的str类型都只是定宽字符序列 Go语言的字符串是一个用 ...
- vue-cli新手总结
项目中需要用到vue-cli脚手架来搭建前端框架,对于vue小白,总结一下自己遇到的问题以及解决方案,还要学习的地方有很多. vue-cli安装下载网上有很多教程,但对于新手而言,有些地方需要自己摸索 ...