本文操作环境:
windows7系统,DELL G3电脑,python3.5版
python实现将阿拉伯数字转换成中文
第一种转换方式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
1 - - > 一
12 - - > 一二
def num_to_char(num):
"""数字转中文"""
num = str (num)
new_str = ""
num_dict = { "0" :u "零" , "1" :u "一" , "2" :u "二" , "3" :u "三" , "4" :u "四" , "5" :u "五" , "6" :u "六" , "7" :u "七" , "8" :u "八" , "9" :u "九" }
listnum = list (num)
# print(listnum)
shu = []
for i in listnum:
# print(num_dict[i])
shu.append(num_dict[i])
new_str = "".join(shu)
# print(new_str)
return new_str
|
第二种转换方式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
1 - - > 一
12 - - > 十二
23 - - > 二十三
_MAPPING = (u '零' , u '一' , u '二' , u '三' , u '四' , u '五' , u '六' , u '七' , u '八' , u '九' , u '十' , u '十一' , u '十二' , u '十三' , u '十四' , u '十五' , u '十六' , u '十七' ,u '十八' , u '十九' )
_P0 = (u' ', u' 十 ', u' 百 ', u' 千',)
_S4 = 10 * * 4
def _to_chinese4(num):
assert ( 0 < = num and num < _S4)
if num < 20 :
return _MAPPING[num]
else :
lst = []
while num > = 10 :
lst.append(num % 10 )
num = num / 10
lst.append(num)
c = len (lst) # 位数
result = u''
for idx, val in enumerate (lst):
val = int (val)
if val ! = 0 :
result + = _P0[idx] + _MAPPING[val]
if idx < c - 1 and lst[idx + 1 ] = = 0 :
result + = u '零'
return result[:: - 1 ]
|
实例扩展:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
#!/usr/bin/python
#-*- encoding: utf-8 -*-
import types
class NotIntegerError(Exception):
pass
class OutOfRangeError(Exception):
pass
_MAPPING = (u '零' , u '一' , u '二' , u '三' , u '四' , u '五' , u '六' , u '七' , u '八' , u '九' , )
_P0 = (u' ', u' 十 ', u' 百 ', u' 千', )
_S4, _S8, _S16 = 10 * * 4 , 10 * * 8 , 10 * * 16
_MIN, _MAX = 0 , 9999999999999999
def _to_chinese4(num):
'''转换[0, 10000)之间的阿拉伯数字
'''
assert ( 0 < = num and num < _S4)
if num < 10 :
return _MAPPING[num]
else :
lst = [ ]
while num > = 10 :
lst.append(num % 10 )
num = num / 10
lst.append(num)
c = len (lst) # 位数
result = u''
for idx, val in enumerate (lst):
if val ! = 0 :
result + = _P0[idx] + _MAPPING[val]
if idx < c - 1 and lst[idx + 1 ] = = 0 :
result + = u '零'
return result[:: - 1 ].replace(u '一十' , u '十' )
def _to_chinese8(num):
assert (num < _S8)
to4 = _to_chinese4
if num < _S4:
return to4(num)
else :
mod = _S4
high, low = num / mod, num % mod
if low = = 0 :
return to4(high) + u '万'
else :
if low < _S4 / 10 :
return to4(high) + u '万零' + to4(low)
else :
return to4(high) + u '万' + to4(low)
def _to_chinese16(num):
assert (num < _S16)
to8 = _to_chinese8
mod = _S8
high, low = num / mod, num % mod
if low = = 0 :
return to8(high) + u '亿'
else :
if low < _S8 / 10 :
return to8(high) + u '亿零' + to8(low)
else :
return to8(high) + u '亿' + to8(low)
def to_chinese(num):
if type (num) ! = types.IntType and type (num) ! = types.LongType:
raise NotIntegerError(u '%s is not a integer.' % num)
if num < _MIN or num > _MAX:
raise OutOfRangeError(u '%d out of range[%d, %d)' % (num, _MIN, _MAX))
if num < _S4:
return _to_chinese4(num)
elif num < _S8:
return _to_chinese8(num)
else :
return _to_chinese16(num)
if __name__ = = '__main__' :
print to_chinese( 9000 )
|
以上就是python数字转对应中文的方法总结的详细内容,更多关于python数字怎么转对应中文的资料请关注服务器之家其它相关文章!
原文链接:https://www.php.cn/python-tutorials-475661.html