100以内
def number_C2E(ChineseNumber):
"""中文数字转整形"""
map = dict(〇=0, 一=1, 二=2, 三=3, 四=4, 五=5, 六=6, 七=7, 八=8, 九=9, 十=10)
size = len(ChineseNumber)
if size == 0 : return 0
if size < 2:
return map[ChineseNumber]
ans = 0
continue_flag = False # 连续进两个的标志位
for i in range(size):
if continue_flag:
continue_flag = False
continue
if i+1 < size and ChineseNumber[i+1] == '十':
ans += map[ChineseNumber[i]]*10
continue_flag = True
continue
ans += map[ChineseNumber[i]]
return ans
ans = number_C2E('十九')
print(ans)
输出:
19
十万以内
def number_C2E(ChineseNumber):
"""中文数字转整形"""
map = dict(〇=0, 零=0, 一=1, 二=2, 三=3, 四=4, 五=5, 六=6, 七=7, 八=8, 九=9, 十=10)
bit_map = dict(十=10, 百=100, 千=1000, 万=10000)
size = len(ChineseNumber)
if size == 0: return 0
if size < 2:
return map[ChineseNumber]
ans = 0
continue_flag = False # 连续进两个的标志位
for i in range(size):
if continue_flag:
continue_flag = False
continue
if i + 1 < size:
if ChineseNumber[i + 1] in bit_map.keys():
ans += map[ChineseNumber[i]] * bit_map[ChineseNumber[i + 1]]
continue_flag = True
continue
ans += map[ChineseNumber[i]]
return ans
print(number_C2E('九万零一百零一'))
输出:
90101
一亿以内
def number_C2E(ChineseNumber):
"""中文数字转整形"""
map = dict(〇=0, 零=0, 一=1, 二=2, 三=3, 四=4, 五=5, 六=6, 七=7, 八=8, 九=9, 十=10)
bit_map = dict(十=10, 百=100, 千=1000)
bit_map_w = dict(万=10000)
size = len(ChineseNumber)
if size == 0: return 0
if size < 2:
return map[ChineseNumber]
ans = 0
continue_flag = False # 连续进两个的标志位
for i in range(size):
if continue_flag:
continue_flag = False
continue
if ChineseNumber[i] in bit_map_w.keys():
ans = ans * bit_map_w[ChineseNumber[i]]
continue_flag = True
continue
if i + 1 < size:
if ChineseNumber[i + 1] in bit_map.keys():
ans += map[ChineseNumber[i]] * bit_map[ChineseNumber[i + 1]]
continue_flag = True
continue
ans += map[ChineseNumber[i]]
return ans
支持很大的数字
def number_C2E(ChineseNumber):
"""中文数字转整形"""
map = dict(〇=0, 零=0, 一=1, 二=2, 三=3, 四=4, 五=5, 六=6, 七=7, 八=8, 九=9, 十=10)
bit_map = dict(十=10, 百=100, 千=1000)
bit_map_w = dict(万=10000, 亿=100000000)
size = len(ChineseNumber)
if size == 0: return 0
if size < 2:
return map[ChineseNumber]
if '亿' in ChineseNumber:
numbers = ChineseNumber.split('亿')
print(numbers)
left = number_C2E(numbers[0])*bit_map_w['亿']
right = number_C2E(numbers[1])
print(left)
print(right)
return left + right
ans = 0
continue_flag = False # 连续进两个的标志位
for i in range(size):
if continue_flag:
continue_flag = False
continue
if ChineseNumber[i] in bit_map_w.keys():
ans = ans * bit_map_w[ChineseNumber[i]]
continue_flag = True
continue
if i + 1 < size:
if ChineseNumber[i + 1] in bit_map.keys():
ans += map[ChineseNumber[i]] * bit_map[ChineseNumber[i + 1]]
continue_flag = True
continue
ans += map[ChineseNumber[i]]
return ans