zoukankan      html  css  js  c++  java
  • Python小程序 -- 人民币小写转大写辅助工具

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


    输入样例:


    123.22


    输出样例:


    壹佰贰拾叁圆贰角贰分



    参考代码:


    #!/usr/bin/env python
    # encoding: utf-8
    
    from __future__ import print_function
    import sys
    import re
    import base64
    import time
    import os
    import getpass
    
    reload(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 = 0
    	dot_count = 0
    	in_str = raw_input("Please input number : ")
    	for i in in_str:
    		if i == '.':
    			dot_count += 1
    		elif ord(i) <= ord('z') and ord(i) >= ord('A'):
    			print("Error")
    			return
    	if len(in_str) > 12 or dot_count > 1:
    		print("Error")
    		return
    	in_str = unicode(in_str).decode("utf8")
    	out_str = ""
    	if in_str.find('.') != -1:
    		flag = 1
    	sum_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 !!")
    		return
    	if 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':
    			continue
    		elif end_flag == 'n' or end_flag == 'N':
    			break
    		else:
    			print("
    Error!!")
    			break
    
    if __name__ == '__main__':
    	main()
    


  • 相关阅读:
    ElasticSearch搜索引擎安装配置拼音插件pinyin
    ElasticSearch搜索引擎安装配置中文分词器IK插件
    Linux系统中ElasticSearch搜索引擎安装配置Head插件
    阿里云服务器Linux系统安装配置ElasticSearch搜索引擎
    盒子模型
    div与span的区别
    .与localhost与 .sqlexpress的区别
    C#-多态
    C#-里氏转换
    C#-继承
  • 原文地址:https://www.cnblogs.com/csnd/p/12897051.html
Copyright © 2011-2022 走看看