初学Python,做了一个练习题,将一个数转换成人民币读法的字符串
#大写汉字
han_list = ["零","壹","贰","叁","肆","伍","陆","柒","捌","玖","拾"]
#单位
fraction_unit_list = ["角","分"]
four_unit_list = ["千","百","拾",""]
unit_list = ["元","万","亿","万"]
#分离整数和小数
def separate_integer_decimal(num):
integer = int(num)
fraction = round((num - integer) * 100)
return [integer,fraction]
#整数数字转汉字
def four_to_hanstr(num):
num = str(num)
if len(num) == 0:
return ""
elif len(num) == 1:
num = "000" + num
elif len(num) == 2:
num = "00" + num
elif len(num) == 3:
num = "0" + num
list1 = ["","","",""]
count_0 = 0
for i in range(len(num)):
number = int(num[i])
if number == 0:
count_0 += 1
else:
list1[i] = han_list[number] + four_unit_list[i]
if count_0 == 3 or count_0 == 0:
return list1[0] + list1[1] + list1[2] + list1[3]
elif count_0 == 1:
if list1[1] == '':
return list1[0] + han_list[0] + list1[2] + list1[3]
elif list1[2] == '':
return list1[0] + list1[1] + han_list[0] + list1[3]
else:
return list1[0] + list1[1] + list1[2] + list1[3]
elif count_0 == 2:
if list1[1] == '' and list1[2] == '':
return list1[0] + han_list[0] + list1[3]
elif list1[0] == '' and list1[2] == '':
return list1[1] + han_list[0] + list1[3]
elif list1[1] == '' and list1[3] == '':
return list1[0] + han_list[0] + list1[2]
else:
return list1[0] + list1[1] + list1[2] + list1[3]
else:
return ""
#小数数字转汉字,只取两位
def fraction_to_hanstr(num):
num = str(num)
if len(num) == 1:
num = "0" + num
list1 = ["",""]
for i in range(2):
number = int(num[i])
if number != 0:
list1[i] = han_list[number] + fraction_unit_list[i]
return "".join(list1)
#拆分整数部分,四位为一个单位
def split_integer(num):
num = str(num)
list1 = []
while len(num) > 0:
if len(num) <= 4:
list1.append(num)
break
else:
list1.append(num[-4:])
num = num[0:-4]
return list1
#函数入口
def num_to_han(num):
if num > 999999999999999.93:
return "This number is out of range."
tuple1 = separate_integer_decimal(num)
result = fraction_to_hanstr(tuple1[1])
integer_list = split_integer(tuple1[0])
for i in range(len(integer_list)):
han_str = four_to_hanstr(integer_list[i])
if len(han_str) > 0:
if i != 0 and integer_list[i-1][0] == '0':
result = han_str + unit_list[i] + han_list[0] + result
else:
result = han_str + unit_list[i] + result
return result
print(num_to_han(100006789.01))