本帖最后由 Rui. 于 2019-12-9 09:39 编辑
本人一个在校大学生,自学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
以上是以前对于整数部分和小数部分处理的函数代码,在输入整数时会出现‘零’的现象
===============================================================
下面的新代码是我用正则表达式修改后的,修复了以上的现象
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[i])
# 如果每4个数字一组中的最后一个数字,且其不为0
if i != num_len - 1 and num != 0:
result += han_list[num] + unit_list[num_len - 2 - i]
else:
# 如果传入的四位数,四位数字都为0则不做任何输入
if i == num_len - 4 and int(num_str[num_len - 3])== 0 \
and int(num_str[num_len - 2]) == 0 \
and int(num_str[num_len - 1]) == 0 \
and num == 0:
pass
# 如果传入的四位数,后三位数字为0
elif i == num_len - 3 and int(num_str[num_len - 2]) == 0 \
and int(num_str[num_len - 1]) == 0 \
and num == 0:
break
# 如果从左到右第2位和第3位为0只输入一个0
elif i == num_len - 2 and int(num_str[num_len - 1]) == 0 \
and num == 0:
break
else:
if num == 0:
if flag == 0:
result += han_list[num]
flag += 1
else:
pass
else:
result += han_list[num]
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[i])
result += str(han_list[num])
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:完善对于整数和小数部分的处理
|