刷算法遇到的一道题,觉得挺有意思,完善了一下写法,有需要的可以拿去用
class RMB():def __init__(self,rmb):self.rmb = str(rmb)self.chinchar_dict = {0:'零',1:'壹',2:'贰',3:'叁',4:'肆',5:'伍',6:'陆',7:'柒',8:'捌',9:'玖'}self.chinunit_dict = {1:'元',2:'拾',3:'佰',4:'仟',5:'万',6:'亿',8:'整'}self.chindecimal_dict = {0:'零',1:'角',2:'分'}def zero_remove(self,chin_RMB):try:while True:if chin_RMB[-1] == '零':chin_RMB = chin_RMB[:-1]else:breakwhile True:if chin_RMB[0] == '零':chin_RMB = chin_RMB[1:]else:breakexcept:passreturn chin_RMBdef input_check(self,rmb):zero_FLAG = 0for i in self.rmb:if i != '0':zero_FLAG = 1if zero_FLAG == 0:return Falsetry:if int(self.rmb):self.rmb += '.00'except:passreturn Truedef zero_check(self,chin_chars):for i in range(0,len(chin_chars)):if chin_chars[i] == '亿':if len(chin_chars) > i+3 and chin_chars[i+2] != '仟':chin_chars.insert(i+1,'零')if chin_chars[i] == '万':if len(chin_chars) > i+3 and chin_chars[i+2] != '仟':chin_chars.insert(i+1,'零') for i in range(0,len(chin_chars)):if chin_chars[i] == '零':j = i + 1while True:if chin_chars[j] == '零':chin_chars[j] = ''j += 1else:breakreturn chin_charsdef largenumber_alter(self,rmb):chin_RMB_million = []chin_RMB_billion = []if len(rmb) <5:return []elif len(rmb) >8:million = rmb[-8:-4]billion = rmb[0:-8]else:million = rmb[0:-4]billion = []for i in range(1,len(million)):try:chin_char = self.chinchar_dict[int(million[i-1])]chin_RMB_million.append(chin_char)chin_unit = self.chinunit_dict[len(million)-i+1]if chin_char != '零':chin_RMB_million.append(chin_unit)except:passchin_RMB_million = self.zero_remove(chin_RMB_million)if chin_RMB_million != []:if rmb[-5] == '0' :chin_RMB_million.append('万')elif rmb[-6] == '0':chin_RMB_million.append('零')if billion != []:for i in range(1,len(billion)+1):try:chin_char = self.chinchar_dict[int(billion[i-1])]chin_RMB_billion.append(chin_char)chin_unit = self.chinunit_dict[len(billion)-i+1]if chin_char != '零' and i != len(billion):chin_RMB_billion.append(chin_unit)except:passchin_RMB_billion = self.zero_remove(chin_RMB_billion)chin_RMB_billion.append('亿')chin_largenumber = chin_RMB_billion + chin_RMB_millionelse:chin_largenumber = chin_RMB_millionreturn chin_largenumberdef alter(self):if self.input_check(self.rmb):rmb = self.rmb.split('.')else:return '零'chin_RMB = []integer,decimal = list(rmb[0]),list(rmb[1])for i in range(5,0,-1):try:chin_char = self.chinchar_dict[int(integer[-i])]chin_unit = self.chinunit_dict[i]if chin_char == '壹' and i==2:passelse:chin_RMB.append(chin_char)if chin_char != '零':chin_RMB.append(chin_unit)except:passchin_RMB = self.zero_remove(chin_RMB)if len(integer) == 1 and integer[0] == '0':pass elif chin_RMB != [] and chin_RMB[-1] != '元':chin_RMB.append('元')elif chin_RMB == [] and len(integer)>5:chin_RMB.append('元')for i in range(1,3):try:chin_char = self.chinchar_dict[int(decimal[i-1])]chin_unit = self.chindecimal_dict[i]if chin_char != '零':chin_RMB.append(chin_char)chin_RMB.append(chin_unit)except:passchin_RMB = self.zero_remove(chin_RMB)chin_largenumber = self.largenumber_alter(integer)chin_chars = chin_largenumber + chin_RMBif chin_chars[-1] == '元':chin_chars.append('整')chin_chars = self.zero_check(chin_chars)chinese_RMB = '人民币' + ''.join(chin_chars)return chinese_RMBwhile True:try:rmb = input()chinese_money = RMB(rmb)print(chinese_money.alter())except:break