本帖最后由 Gin_Q 于 2020-7-20 10:47 编辑
大家有兴趣可以测测!- #coding=utf-8
- #By Gin
- #2020/7/17
- #Rev 02
-
- ch_dict = {u'零':0, u'一':1, u'二':2, u'三':3, u'四':4,
- u'五':5, u'六':6, u'七':7, u'八':8, u'九':9,u'十':10,
- u'百':100, u'千':10 ** 3, u'万':10 ** 4,u'〇':0,
- u'壹':1, u'贰':2, u'叁':3, u'肆':4,u'伍':5,
- u'陆':6, u'柒':7, u'捌':8, u'玖':9,u'拾':10,
- u'佰':100, u'仟':10 ** 3, u'萬':10 ** 4,u'亿':10 ** 8, u'億':10 ** 8,
- u'幺': 1,u'两':2}
-
- def converion(temp, unit):
- intr = 0
- # print(temp, unit)
- temp_len = len(temp)
- if temp_len <= 2 and temp[0] == 10: #十到十九需要单独转换
- for i in temp:
- intr += i
- return intr * unit
- for i in range(temp_len):
- if temp[i] > 9 and temp[i-1] != 0:
- intr += temp[i] * temp[i-1]
- if temp[-1] < 10: intr += temp[-1]
- return intr * unit
-
- def split_unit(temp, unit):
- nu = []
- while True:
- if temp[0] != unit:
- nu.append(temp.pop(0))
- continue
- temp.pop(0)
- return converion(nu, unit)
-
- def onere(strarr):
- intr = 0
- temp = [ch_dict[i] for i in strarr] #列表666[6, 100, 6, 10, 6]
- if 10**8 in temp:
- intr += split_unit(temp, 10**8)
- if 10**4 in temp:
- intr += split_unit(temp, 10**4)
- if temp:
- intr += converion(temp, 1)
- return str(intr)
-
- test_dig = [u'九',
- u'十一',
- u'一百二十三',
- u'一千二百零三',
- u'一万一千一百零一',
- u'十万零三千六百零九',
- u'一百二十三万四千五百六十七',
- u'一千一百二十三万四千五百六十七',
- u'一亿一千一百二十三万四千五百六十七',
- u'一百零二亿五千零一万零一千零三十八',
- u'一千一百一十一亿一千一百二十三万四千五百六十七',
- ]
-
- for i in test_dig:
- print(i,'\n',onere(i))
复制代码
- 九
- 9
- 十一
- 11
- 一百二十三
- 123
- 一千二百零三
- 1203
- 一万一千一百零一
- 11101
- 十万零三千六百零九
- 103609
- 一百二十三万四千五百六十七
- 1234567
- 一千一百二十三万四千五百六十七
- 11234567
- 一亿一千一百二十三万四千五百六十七
- 111234567
- 一百零二亿五千零一万零一千零三十八
- 10250011038
- 一千一百一十一亿一千一百二十三万四千五百六十七
- 111111234567
-
- 请按任意键继续. . .
复制代码
|