将非负整数 num 转换为其对应的英文表示。
'''
题目 : 将非负整数 num 转换为其对应的英文表示。
示例1:输入:num = 123
输出:"One Hundred Twenty Three"
示例2:输入:num = 12,345
输出:"Twelve Thousand Three Hundred Forty Five"
示例3:输入:num = 1,234,567
输出:"One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven"
示例4:输入:num = 1,234,567,891
输出:"One Billion Two Hundred Thirty Four Million Five Hundred Sixty Seven Thousand Eight Hundred Ninety One"
提 示:0 <= num <= 2的31次方 - 1
题目来源:CSDN每日一练
'''
'''
说明:这个类只能将0 <= num <= 2的31次方 - 1转换为英语
'''
class num_convert_en:
# def __init__(self):
# self.num_input = ''
num_en_list = ['Zero','One','Two','Three','Four','Five','Six','Seven',
'Eight','Nine','Ten','Eleven','Twelve','Thirteen',
'Fourteen','Fifteen','Sixteen','Seventeen', 'Eighteen',
'Nineteen','Twenty','Thirty','Forty','Fifty','Sixty','Seventy',
'Eighty','Ninety','Hundred','Thousand','Million','Billion']
num_en_tens = ['','','Twenty','Thirty','Forty','Fifty','Sixty','Seventy',
'Eighty','Ninety']
# 字符串转为数字
def input_convert_num(self,num_input):
try:
num_convert =int(num_input)
if num_convert >=0:
return num_convert
else:
return num_input+'不是正整数'
except Exception as e:
return num_input+'不是数字'
#转换0-19
def convert_en_Nineteen(self,num_convert):
num_en_list = ['Zero','One','Two','Three','Four','Five','Six','Seven',
'Eight','Nine','Ten','Eleven','Twelve','Thirteen',
'Fourteen','Fifteen','Sixteen','Seventeen', 'Eighteen',
'Nineteen']
num_en = num_en_list[num_convert]
return num_en
#转换0-99
def convert_en_tens(self,num_convert):
num_en_tens = ['','','Twenty','Thirty','Forty','Fifty','Sixty','Seventy',
'Eighty','Ninety']
num_en_list = ['','One','Two','Three','Four','Five','Six','Seven',
'Eight','Nine','Ten','Eleven','Twelve','Thirteen',
'Fourteen','Fifteen','Sixteen','Seventeen', 'Eighteen',
'Nineteen']
num_en = ''
if num_convert%10 == 0:
num_en = num_en_tens[num_convert//10%10]
else:
num_en = num_en_tens[num_convert//10%10]+num_en_list[num_convert%10]
return num_en
#转换100-999
def convert_en_hundred(self,num_convert):
num_index = num_convert//100
num_hundred =self.convert_en_tens(num_index)
num_index_tens = num_convert%100
num_tens = ''
if num_index_tens > 19:
num_tens = self.convert_en_tens(num_index_tens)
else:
num_tens = self.convert_en_Nineteen(num_index_tens)
if num_tens == 'Zero':
return num_hundred+' '+'Hundred'
else:
return num_hundred+' '+'Hundred '+num_tens
#将数字转换为序列,一个元素转三位
def num_sep(self,num_input):
num_sep_str = []
num_sep_str_int = []
if isinstance(self.input_convert_num(num_input),int) :
index = len(num_input)%3
num_sep_str.append(num_input[0:index])
num_sub = num_input[index:]
num_sub_list = []
for i in range(len(num_sub)):
if i%3 == 0:
num_sub_list.append(i)
for i in num_sub_list:
num_sep_str.append(num_sub[i:i+3])
for i in num_sep_str:
num_sep_str_int.append(int(i))
return num_sep_str_int
#为数字序列加上单位
def num_convert(self,num):
num_list = self.num_sep(num)
num_list_en =[]
for num in num_list:
if 0 <= num <20:
num_en = self.convert_en_Nineteen(num)
num_list_en.append(num_en)
elif 20 <= num <99:
num_en =self.convert_en_tens(num)
num_list_en.append(num_en)
else:
num_en =self.convert_en_hundred(num)
num_list_en.append(num_en)
num_list_units =['Thousand','Million','Billion']
num = len(num_list_en)
if num == 1:
return num_list_en
elif num ==2:
num_list_en[-2] = num_list_en[-2]+' Thousand'
return num_list_en
elif num ==3:
num_list_units =[' Thousand',' Million']
for num in range(0,len(num_list_units)):
num_rev = int('-'+str(num+2))
num_list_en[num_rev] = num_list_en[num_rev]+num_list_units[num]
return num_list_en
else :
num_list_units =[' Thousand',' Million',' Billion']
for num in range(0,len(num_list_units)):
num_rev = int('-'+str(num+2))
num_list_en[num_rev] = num_list_en[num_rev]+num_list_units[num]
return num_list_en
if __name__ == '__main__':
num_input = input("请输入非负整数:")
num_en = num_convert_en()
num_list = num_en.num_sep(num_input)
# print(num_list)
num_list_en = num_en.num_convert(num_input)
print(" ".join(num_list_en))
\