数字转人民币大写完整代码
这是《疯狂Python讲义》第四章练习题第12题,输入一个数字,将数字转换成中国“大写数字”;书中有示例,但示例代码只实现了部分功能,在此贴出我完善后的代码。较示例而言,新增了输入合法性检测、连续“零零”处理、小数部分处理。代码如下:
#!/usr/bin/env python3
#coding=utf-8
import sys
import re
han_list = ["零","壹","贰","叁",\
"肆","伍","陆","柒","捌","玖"]
unit_list= ["拾","佰","仟"]
'''判断输入的合法性'''
def is_number(num):
#匹配大于1的float型 | 0~1的float型
pattern = re.compile(r'^[1-9]\d*\.?\d*?$|^0\.\d+$') #|两边不能有空格
result = pattern.match(num)
if result:
return True
else :
return False
'''获取用户输入'''
def get_num():
while True:
#在Python2中,input只支持数字,能进行数学运算
#raw_input()会把输入全部当作字符(串
#num = raw_input("请输入存款金额:")
num = input("请输入存款金额:")
print("你输入的内容是:" + num)
if num == 'q':
sys.exit()
if is_number(num):
print("开始转换"),
return num
else:
print("请输入大于0的数!")
'''分离整数和小数'''
def divide(num):
integer = int(float(num)) #取整
#得到小数*100四舍五入再取整
fraction= int(round((float(num) - integer)*100))
if fraction < 10:
return (str(integer), '0' + str(fraction))
elif fraction < 100:
return (str(integer), str(fraction))
else:
return (str(integer + 1), '00')
'''加上 拾佰仟'''
def four_to_hanstr(num_str):
result = ""
old_num = 0
num_len = len(num_str)
for i in range(num_len):
num = int(num_str[i])
if i != num_len - 1 and num != 0 :
result += han_list[num] + unit_list[num_len-2-i]
elif i != 0 and old_num == 0 and num == 0 :
pass
else:
result += han_list[num]
old_num = num
return result
'''加上 亿万'''
def integer_to_str(num_str):
str_len = len(num_str)
if str_len > 12 :
print("数字太大,翻译不了")
return
elif str_len > 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:
return four_to_hanstr(num_str[:-4]) + "万" \
+ four_to_hanstr(num_str[-4:])
else:
return four_to_hanstr(num_str)
'''小数部分加上 角分'''
def fraction_to_str(num_str):
result = han_list[int(num_str[0])] + "角" \
+han_list[int(num_str[1])] + "分"
return result
def main():
num = get_num()
integer, fraction = divide(num)
integer_str = integer_to_str(integer)
if int(integer) > 0 :
integer_str = integer_str.replace("零亿", "亿")
integer_str = integer_str.replace("零万", "万")
integer_str = (integer_str + "元").replace("零元", "元")
fraction_str = fraction_to_str(fraction)
print(", 结果如下:")
print(integer_str + fraction_str)
main()
运行结果:
第一次发博客,多多指教……