import re
dict= {'1': '壹', '2': '贰', '3': '叁', '4': '肆', '5': '伍','6':'陆','7':'柒','8':'捌','9':'玖','0':'零'}
dict1= {'0':'','1':'拾','2':'佰','3':'仟','4':'万','5':'万拾','6':'万百','7':'万千','8':'亿',
'9':'亿拾','10':'亿佰','11':'亿仟','12':'亿万'}
dict2={'0':'角','1':'分'}
def deepDone(word,begin):
index=word.find('零',begin)
#处理 零元 这种特殊情况
if(word=='零元'):
return word
if(index==-1):
return word
else:
if(word[index+1]=='元'):
word=word[0:index]+word[index:].replace(word[index], '', 1)
return word
#处理 大数字 拾万 百万的情况
if(word[index+3]=='零'):
word=word[0:index]+word[index:].replace(word[index:index+3],'',1)
word=deepDone(word,index)
return word
if(word[index+2]!='零'): #壹佰零拾玖元
#壹佰零玖元
word=word[0:index]+word[index:].replace(word[index+1],'',1)
word=deepDone(word,index+1)
else:
word=word[0:index]+word[index:].replace(word[index:index+2],'',1)
#壹千壹百零拾零元
word=deepDone(word,index)
return word
'''
除去多余的万字
'''
def deepDone2(word,key):
word=word[::-1]
index=word.find(key)
if (index==-1):
return word[::-1]
word=word[0:index+1]+word[index+1:].replace(key,'',3)
return word[::-1]
def numtochn1(str_num):
word='元'
i=0
for one in str_num[::-1]:
num_dict=dict[one] #数字大写
word_dict=dict1[str(i)] #单位大写
word=word+word_dict+num_dict
i+=1
word=word[::-1] #对word做进一步的调整
word=deepDone(word,0) # 对word进下一步处理 ,0 为word 中的位置
word=deepDone2(word,'万') #对word进下一步处理,从后向前数,保留第一个 “万”字
word=deepDone2(word,'亿') #对word进下一步处理,从后向前数,保留第一个 “亿”字
return word
def numtochn2(str_num):
i=0
word=''
for one in str_num:
num_dict=dict[one]
word_dict=dict2[str(i)]
if (num_dict=='零'):
word_dict=''
if i==1:
num_dict=''
i+=1
word=word+num_dict+word_dict
return word
def numtochn(num):
word=''
arr=[]
str_num=str(num)
postion=str_num.find(".")
if((postion)==-1): #没有 . 的情况
word=numtochn1(str_num)
word='人民币'+word+'整'
else:
arr=str_num.split(".",1)
word=numtochn1(arr[0])
if(arr[1]=='00'):
word='人民币'+word+'整'
else:
word2=numtochn2(arr[1])
word='人民币'+word+word2
return word
'''
对输入 进行一些处理:防止 异常的输入
形式应该是这样的: XXXX.XX
'''
def MyInput():
num=input("请输入您想转化的数字:\n")
#pattern=re.compile(r'^(([0-9]+)|([0-9]+\.[0-9]{1,2}))$')
pattern=re.compile(r'^[1-9]\d*(\.[0-9]{1,2})?$|^0(\.[0-9]{1,2})?$')
# [1-9] 第一个数字为 1~9
# \d * 然后 0~9 这些字符的 0个或者多个
# (\.[0-9]{1,2}) 小数点后面 一位 或者两位
# ? 代表可选 或者不可选
# | 或者
# 匹配 0.01 0.98 这类的数字
match=pattern.search(num)
if match:
print('result: ',num)
else:
print('重新输入你的数字形式应该是这样的: XXXX.XX:\n')
return -1
return num
if __name__=='__main__':
#num=input("请输入您想转化的数字:\n")
num=MyInput()
while((num==-1)):
num=MyInput()
print('你输入的数字为:',num)
word=numtochn(num)
print(word)
dict= {'1': '壹', '2': '贰', '3': '叁', '4': '肆', '5': '伍','6':'陆','7':'柒','8':'捌','9':'玖','0':'零'}
dict1= {'0':'','1':'拾','2':'佰','3':'仟','4':'万','5':'万拾','6':'万百','7':'万千','8':'亿',
'9':'亿拾','10':'亿佰','11':'亿仟','12':'亿万'}
dict2={'0':'角','1':'分'}
def deepDone(word,begin):
index=word.find('零',begin)
#处理 零元 这种特殊情况
if(word=='零元'):
return word
if(index==-1):
return word
else:
if(word[index+1]=='元'):
word=word[0:index]+word[index:].replace(word[index], '', 1)
return word
#处理 大数字 拾万 百万的情况
if(word[index+3]=='零'):
word=word[0:index]+word[index:].replace(word[index:index+3],'',1)
word=deepDone(word,index)
return word
if(word[index+2]!='零'): #壹佰零拾玖元
#壹佰零玖元
word=word[0:index]+word[index:].replace(word[index+1],'',1)
word=deepDone(word,index+1)
else:
word=word[0:index]+word[index:].replace(word[index:index+2],'',1)
#壹千壹百零拾零元
word=deepDone(word,index)
return word
'''
除去多余的万字
'''
def deepDone2(word,key):
word=word[::-1]
index=word.find(key)
if (index==-1):
return word[::-1]
word=word[0:index+1]+word[index+1:].replace(key,'',3)
return word[::-1]
def numtochn1(str_num):
word='元'
i=0
for one in str_num[::-1]:
num_dict=dict[one] #数字大写
word_dict=dict1[str(i)] #单位大写
word=word+word_dict+num_dict
i+=1
word=word[::-1] #对word做进一步的调整
word=deepDone(word,0) # 对word进下一步处理 ,0 为word 中的位置
word=deepDone2(word,'万') #对word进下一步处理,从后向前数,保留第一个 “万”字
word=deepDone2(word,'亿') #对word进下一步处理,从后向前数,保留第一个 “亿”字
return word
def numtochn2(str_num):
i=0
word=''
for one in str_num:
num_dict=dict[one]
word_dict=dict2[str(i)]
if (num_dict=='零'):
word_dict=''
if i==1:
num_dict=''
i+=1
word=word+num_dict+word_dict
return word
def numtochn(num):
word=''
arr=[]
str_num=str(num)
postion=str_num.find(".")
if((postion)==-1): #没有 . 的情况
word=numtochn1(str_num)
word='人民币'+word+'整'
else:
arr=str_num.split(".",1)
word=numtochn1(arr[0])
if(arr[1]=='00'):
word='人民币'+word+'整'
else:
word2=numtochn2(arr[1])
word='人民币'+word+word2
return word
'''
对输入 进行一些处理:防止 异常的输入
形式应该是这样的: XXXX.XX
'''
def MyInput():
num=input("请输入您想转化的数字:\n")
#pattern=re.compile(r'^(([0-9]+)|([0-9]+\.[0-9]{1,2}))$')
pattern=re.compile(r'^[1-9]\d*(\.[0-9]{1,2})?$|^0(\.[0-9]{1,2})?$')
# [1-9] 第一个数字为 1~9
# \d * 然后 0~9 这些字符的 0个或者多个
# (\.[0-9]{1,2}) 小数点后面 一位 或者两位
# ? 代表可选 或者不可选
# | 或者
# 匹配 0.01 0.98 这类的数字
match=pattern.search(num)
if match:
print('result: ',num)
else:
print('重新输入你的数字形式应该是这样的: XXXX.XX:\n')
return -1
return num
if __name__=='__main__':
#num=input("请输入您想转化的数字:\n")
num=MyInput()
while((num==-1)):
num=MyInput()
print('你输入的数字为:',num)
word=numtochn(num)
print(word)