Python小程序 -- 人民币小写转大写辅助工具

来源:互联网 发布:08最新电影源码 编辑:程序博客网 时间:2024/06/09 21:15

       大家应该都知道,银行打印账单有时候会跟上人民币的阿拉伯数字以及人民币汉字大写写法,转换的过程中有一定的逻辑难度,较为麻烦,所以笔者心血来潮,花了点时间简单实现了一下这一转换过程,以供初学者参考。


输入样例:


123.22


输出样例:


壹佰贰拾叁圆贰角贰分



参考代码:


#!/usr/bin/env python# encoding: utf-8from __future__ import print_functionimport sysimport reimport base64import timeimport osimport getpassreload(sys)sys.setdefaultencoding("utf-8")char_arr_01 = [u"零".decode("utf8"), u"壹".decode("utf8"), u"贰".decode("utf8"), u"叁".decode("utf8"), u"肆".decode(    "utf8"), u"伍".decode("utf8"), u"陆".decode("utf8"), u"柒".decode("utf8"), u"捌".decode("utf8"), u"玖".decode("utf8")];char_arr_02 = [u"圆".decode("utf8"), u"拾".decode("utf8"), u"佰".decode("utf8"), u"仟".decode("utf8"), u"万".decode("utf8"), u"拾".decode("utf8"), u"佰".decode("utf8"), u"仟".decode(    "utf8"), u"亿".decode("utf8"), u"拾".decode("utf8"), u"佰".decode("utf8"), u"仟".decode("utf8"), u"万".decode("utf8"), u"拾".decode("utf8"), u"佰".decode("utf8")]char_arr_03 = [u"分".decode("utf8"), u"角".decode("utf8")]def calcRMB():sum_arr = []in_str_dot = ""in_str_Big = ""flag = 0dot_count = 0in_str = raw_input("Please input number : ")for i in in_str:if i == '.':dot_count += 1elif ord(i) <= ord('z') and ord(i) >= ord('A'):print("Error")returnif len(in_str) > 12 or dot_count > 1:print("Error")returnin_str = unicode(in_str).decode("utf8")out_str = ""if in_str.find('.') != -1:flag = 1sum_arr = in_str.split('.')in_str_Big = sum_arr[0]if flag==1:in_str_dot = sum_arr[1]for i in range(len(in_str_Big)):if cmp(in_str_Big[i],'0') == 0 and (len(in_str_Big)-1-i)%4 != 0:out_str = out_str + char_arr_01[ord(in_str_Big[i])-ord('0')]else:out_str = out_str + char_arr_01[ord(in_str_Big[i])-ord('0')]out_str = out_str + char_arr_02[len(in_str_Big)-1-i]while out_str.find(u"零零".decode("utf8")) != -1:out_str = out_str.replace(u"零零".decode("utf8"), u"零".decode("utf8"))out_str = out_str.replace(u"零亿".decode("utf8"),u"亿".decode("utf8"))out_str = out_str.replace(u"零万".decode("utf8"),u"万".decode("utf8"))if out_str != u"零元".decode("utf8"):out_str = out_str.replace(u"零圆".decode("utf8"),u"圆".decode("utf8"))if len(in_str_dot) > 2 and flag == 1:print("False !!")returnif flag == 1:for i in range(len(in_str_dot)):out_str = out_str + char_arr_01[ord(in_str_dot[i])-ord('0')]out_str = out_str + char_arr_03[len(in_str_dot)-1-i]print(out_str)def main():while 1:os.system("cls")calcRMB()print()end_flag = raw_input("Try Again ? (y/n)")if end_flag == 'y' or end_flag == 'Y':continueelif end_flag == 'n' or end_flag == 'N':breakelse:print("\nError!!")breakif __name__ == '__main__':main()


原创粉丝点击