对于《疯狂python》书P86 数字转人民币代码<完善对于整数和小数的分离>
本帖最后由 Rui. 于 2019-12-9 09:39 编辑本人一个在校大学生,自学python,本程序还有很多地方需要完善,需要改正的地方希望大家积极指出
<第一次发帖,望谅解>
希望能得到各位志同道合的朋友的更正,谢谢!
```python
def divide(num):
"""
用split函数将浮点数以‘.’为界限拆分为
整数部分(integer)
小数部分(fraction)
:param num:
:return:
"""
integer, fraction = str(num).split('.')
result = integer_to_str(integer) + fractional_part(fraction)
return result
```
以上是以前对于整数部分和小数部分处理的函数代码,在输入整数时会出现‘零’的现象
===============================================================
下面的新代码是我用正则表达式修改后的,修复了以上的现象
```python
import re
han_list = ['零','壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']
unit_list = ['拾', '佰', '仟']
def divide(num):
"""
用split函数将浮点数以‘.’为界限拆分为
整数部分(integer)
小数部分(fraction)
:param num:
:return:
"""
num = str(num)
# 通过正则表达式对整数部分进行提取
integer = re.match('^\d*', num)
# 通过调用正则的sub方法将整数部分和小数点替换成空字符(去除),留下小数部分
fraction = re.sub('^\d*\.', '', num)
if integer == '0' or fraction == '0':
result = integer_to_str(integer.group())
return result
else:
result = integer_to_str(integer.group()) + fractional_part(fraction)
if 'error' not in result:
return result
else:
return "数字位数超过12位!"
def four_to_hanstr(num_str):
"""
将一个4位的数字字符串转换成汉字字符串
num_str是需要被转换的4位数字字符串
返回4位数字字符串被转换成汉汉字字符串
:param num_str:
:return: 将结果返回到integer_to_str()函数
"""
result = ""
# 对于只输出一个0做限制
flag = 0
num_len = len(num_str)
# print("传入参数:",num_str)
for i in range(num_len):
num = int(num_str)
# 如果每4个数字一组中的最后一个数字,且其不为0
if i != num_len - 1 and num != 0:
result += han_list + unit_list
else:
# 如果传入的四位数,四位数字都为0则不做任何输入
if i == num_len - 4 and int(num_str)== 0 \
and int(num_str) == 0 \
and int(num_str) == 0 \
and num == 0:
pass
# 如果传入的四位数,后三位数字为0
elif i == num_len - 3 and int(num_str) == 0 \
and int(num_str) == 0 \
and num == 0:
break
# 如果从左到右第2位和第3位为0只输入一个0
elif i == num_len - 2 and int(num_str) == 0 \
and num == 0:
break
else:
if num == 0:
if flag == 0:
result += han_list
flag += 1
else:
pass
else:
result += han_list
return result
def fractional_part(fraction_srt):
"""
对小数部分进行处理
:param fraction_srt:
:return: 转化后的结果,前后加一个空格以便区分
"""
result =""
str_len = len(fraction_srt)
for i in range(str_len):
num = int(fraction_srt)
result += str(han_list)
return ' 点'+result
def integer_to_str(num_str):
"""
对整数位数进行控制
"""
str_len = len(num_str)
if str_len > 12:
error = "error"
return error
elif str_len > 8:
# -8代表这个数字的第八位,第九位就是亿
return four_to_hanstr(num_str[:-8]) + '亿' + \
four_to_hanstr(num_str[-8:-4]) + '万' + \
four_to_hanstr(num_str[-4:])
elif str_len > 4:
# -4代表这个数的第4位,第五位就是万
return four_to_hanstr(num_str[:-4]) + '万' + \
four_to_hanstr(num_str[-4:])
else:
return four_to_hanstr(num_str)
if __name__ == '__main__':
num = float(input("请输入一个数:"))
print("结果为:\n",divide(num))
```
============ 更改记录 ===========
2019年12月8日:发布代码
2019年12月9日0:33:完善对于整数和小数部分的处理
冥月影 发表于 2019-12-8 18:23
请问一下大佬,Python容易上手吗,有点java基础。
哥们,纠正一下,我不是大佬,我只是想分享一下,我也是学python没多久,
你学了Java来学python上手应该回简单,我是学了C然后学的python,毕竟你有一门语言的语法的基础学其他的语言会容易一点;加油,只要付出时间和努力,都可以的!
冥月影 发表于 2019-12-8 18:23
请问一下大佬,Python容易上手吗,有点java基础。
容不容易不好说。看跟什么比。
但根据我目前的文献查阅来看,Python目前以及未来,会是主流的编程语言。
如果要学,还是推荐学Python 支持了入坑了易语言,不想换了 diyikuai 发表于 2019-12-8 16:54
支持了入坑了易语言,不想换了
我的易语言不怎么了解,似乎我知道易语言都是因为”游戏外G“ 有问题,51亿万零是什么鬼? diyikuai 发表于 2019-12-8 16:54
支持了入坑了易语言,不想换了
有学习易语言的时间精力,不如专心研究下C语言! 我想学Python,0中之0 开始 本帖最后由 shaunkelly 于 2019-12-8 18:08 编辑
我试运行一下看看
还有一点不完美哦,超过12位不计算,但是后面还有一个点零???是什么情况的? 书的链接分享一个 为程序员点赞 请问一下大佬,Python容易上手吗,有点java基础。
页:
[1]
2