题目:中文数字转换为阿拉伯数字,如下:
输入:
十一万亿五千三百万三千二百零七
输出:
11000053003207
思路:
-
- 先写一个处理
10000
以下的转换函数,如下代码的num_process()
- 先写一个处理
-
- 以
亿
和万
分别进行切分,如下代码的yi_wan_process()
- 以
num_map = {'零': 0, '一': 1, '二': 2, '三': 3, '四': 4, '五': 5, '六': 6, '七': 7, '八': 8, '九': 9}
unit_map = {'十': 10, '百': 100, '千': 1000, '万': 10000, '亿': 100000000}
# 处理 一万 以下的情况
def num_process(chinese_number):
if not chinese_number:
return 0
result = 0
first_unit = chinese_number[0] in unit_map
num = 0
for index, char in enumerate(chinese_number):
if char in num_map:
num = num_map[char]
if index == len(chinese_number) - 1:
result += num
elif char in unit_map:
if index == 0 and first_unit:
result += unit_map[char]
else:
result += num * unit_map[char]
num = 0
return result
# 以 亿 和 万 进行切分
def yi_wan_process(chinese_number, split_unit):
if not chinese_number:
return 0
result = 0
before, after = "", chinese_number
index = chinese_number.find(split_unit)
if index != -1:
before = chinese_number[:index]
after = chinese_number[index + 1:]
if split_unit == "亿":
result += yi_wan_process(before, "万") * unit_map[split_unit]
result += yi_wan_process(after, "万")
elif split_unit == "万":
result += num_process(before) * unit_map[split_unit]
result += num_process(after)
return result
def chinese_to_arabic(chinese_number):
if not chinese_number:
return 0
return yi_wan_process(chinese_number, "亿")
if __name__ == "__main__":
chinese_number = "十一万亿五千三百万三千二百零七"
result = chinese_to_arabic(chinese_number)
print(chinese_number, result) # 十一万亿五千三百万三千二百零七 11000053003207