标题: [原创教程] Python实现中文数字替换成阿拉伯数字 [打印本页]
作者: Gin_Q 时间: 2020-7-18 21:31 标题: Python实现中文数字替换成阿拉伯数字
本帖最后由 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
-
- 请按任意键继续. . .
复制代码
作者: leo.liu 时间: 2020-7-19 14:52
新手
看不懂
没看懂
我是新新手
作者: cfwyy77_bat 时间: 2020-7-20 09:20
如果是全角数字"8080" 这种就不要用字典映射转换了。 可以直接int()转。
另外
python3中的字符串都是unicode字符串,前缀可以不加u了吧。
47行,参数直接传temp就可以,没必要传一个副本吧。
作者: Gin_Q 时间: 2020-7-20 10:42
本帖最后由 Gin_Q 于 2020-7-20 10:45 编辑
回复 3# cfwyy77_bat
字典是从网上代码复制的,核心代码自己写的!
8080那个我删除了,忘了修改字典了,的确直接拼接就好了!
47行的确直接传进去就好了,因为前面的元素已经被弹出了!
谢谢指正!很赞哦!
作者: Gin_Q 时间: 2020-7-20 16:36
回复 2# leo.liu
多看视频,多看书!找个论坛多问问(或者百度),基础重要!
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |