zoukankan      html  css  js  c++  java
  • Python TIPS上一道关于人民币金额小写转大写的题

    人民币金额打印

    题目链接:here。我发现我写的好复杂,但万幸编码还算符合人类,看了其他答案,感觉都是天书。

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Date    : 2017-06-09
    # @Author  : Bob Liao (codechaser1@gmail.com)
    # @Link    : https://github.com/coderchaser
    # @Version : python3.4
    
    #创建大小写转换字典
    num_dic={
    	# 1 : "壹",
    	# 2 : "贰",
    	# 3 : "叁",
    	# 4 : "肆",
    	# 5 : "伍",
    	# 6 : "陆",
    	# 7 : "柒",
    	# 8 : "捌",
    	# 9 : "玖",
    	# 0 : "零"
    	u"1": u"壹",
    	u"2": u"贰",
    	u"3": u"叁",
    	u"4": u"肆",
    	u"5": u"伍",
    	u"6": u"陆",
    	u"7": u"柒",
    	u"8": u"捌",
    	u"9": u"玖",
    	u"0": u"零"
    }
    #将输入金额分组,从最低位开始四位分组,最后一组可以少于四位
    def group(num_str) :
    	group_list=[]
    	i=len(num_str)
    	while i>=4 :
    		group_list.append(num_str[i-4:i])
    		i-=4
    	if i!=0 :
    		group_list.append(num_str[:i])
    	#保证顺序输出
    	group_list.reverse()
    	return group_list
    #原始读函数,数字必须全部转化为字符串
    def read_four(num_four) :
    	#读四位分组
    	gewei=""
    	shiwei=""
    	baiwei=""
    	qianwei=""
    	num_len=len(num_four)
    	#当传入的数字为0000时num_len会变成1,会发生list越界
    	if num_four[-1]!=u'0' :
    		if num_four[-2]!=u'0' :
    			gewei=num_dic[num_four[-1]]
    		else :
    			gewei=u"零"+num_dic[num_four[-1]]
    	if num_four[-2]!=u'0' :
    		if num_four[-3]!=u'0' :
    			shiwei=num_dic[num_four[-2]]+u"拾"
    		else :
    			shiwei=u"零"+num_dic[num_four[-2]]+u"拾"
    	if num_four[-3]!=u'0' :
    		if num_four[-4]!=u'0' :
    			baiwei=num_dic[num_four[-3]]+u"佰"
    		else :
    			baiwei=u"零"+num_dic[num_four[-3]]+u"佰"
    	if num_four[-4]!=u'0' :
    		qianwei=num_dic[num_four[-4]]+u"仟"
    	return qianwei+baiwei+shiwei+gewei
    def read_three(num_three) :
    	#读三位分组
    	gewei=""
    	shiwei=""
    	baiwei=""
    	if num_three[-1]!=u'0' :
    		if num_three[-2]!=u'0' :
    			gewei=num_dic[num_three[-1]]
    		else :
    			gewei=u"零"+num_dic[num_three[-1]]
    	if num_three[-2]!=u'0' :
    		if num_three[-3]!=u'0' :
    			shiwei=num_dic[num_three[-2]]+u"拾"
    		else :
    			shiwei=u"零"+num_dic[num_three[-2]]+u"拾"
    	if num_three[-3]!=u'0' :
    		baiwei=num_dic[num_three[-3]]+u"佰"
    	return baiwei+shiwei+gewei
    def read_two(num_two) :
    	#读二位分组
    	gewei=""
    	shiwei=""
    	if num_two[-1]!=u'0' :
    		if num_two[-2]!=u'0' :
    			gewei=num_dic[num_two[-1]]
    		else :
    			gewei=u"零"+num_dic[num_two[-1]]
    	if num_two[-2]!=u'0' :
    		if num_two[-2] ==u'1' :
    			shiwei=u"拾"
    		else :
    			shiwei=num_dic[num_two[-2]]+u"拾"
    	return shiwei+gewei
    def read_one(num_one) :
    	#读一位分组
    	if num_one!=u'0' :
    		return num_dic[num_one]
    	else :
    		return ""
    #建立调用字典关系
    call_read={
    	1 : read_one,
    	2 : read_two,
    	3 : read_three,
    	4 : read_four
    }
    def read(num) :
    	#将数字int转化为字符串
    	#金额不可以像如下形式:
    	#		0100
    	#Python3会将0开头的数字
    	#识别为8进制,一般人不会
    	#这样写金额,不予考虑
            if num == 0:
                print("零圆")
                return
    	num_str=str(abs(num))
    	#分组
    	group_list=group(num_str)
    	read_part=[]
    	if num<0 :
    		read_part.append(u'负')
    	for i in group_list :
    		len_part=len(i)
    		read_part.append(call_read[len_part](i))
    		if group_list.index(i)== 0 and len(group_list)>1 :
    			read_part.append(u'万')
    	read_part.append(u'圆')
    	print("".join(read_part))
    
    # num=int(input('Your Number: '))
    # print(num)
    read(90901001)
    
    
    世事茫茫,光阴何其有限!
  • 相关阅读:
    BZOJ3992 [SDOI2015]序列统计 【生成函数 + 多项式快速幂】
    BZOJ3993 [SDOI2015]星际战争 【二分 + 网络流】
    BZOJ3325 [Scoi2013]密码 【manacher】
    BZOJ3534 [Sdoi2014]重建 【矩阵树定理】
    BZOJ3507 [Cqoi2014]通配符匹配 【哈希 + 贪心】
    BZOJ2285 [SDOI2011]保密 【01分数规划 + 网络流】
    BZOJ4556 [Tjoi2016&Heoi2016]字符串 【后缀数组 + 主席树 + 二分 + ST表】
    BZOJ4817 [Sdoi2017]树点涂色 【LCT + 线段树】
    BZOJ1195 [HNOI2006]最短母串 【状压dp】
    malloc的使用、用malloc动态分配内存以适应用户的需求的源代码实例
  • 原文地址:https://www.cnblogs.com/bobliao/p/9943459.html
Copyright © 2011-2022 走看看