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 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
| chs_arabic_map = {'零': 0, '一': 1, '二': 2, '三': 3, '四': 4, '五': 5, '六': 6, '七': 7, '八': 8, '九': 9, '十': 10, '百': 100, '千': 1000, '万': 10000, '亿': 10 ** 8, }
def convertChineseDigitsToArabic(chinese_digits, encoding="utf-8"): res = 0 tmp = 0 res_before_yi = 0 for char in chinese_digits: val = chs_arabic_map.get(char, None) if val == 10**8: res += tmp res *= val res_before_yi = res_before_yi * 10 ** 8 + res res = 0 tmp = 0 elif val == 10000: res += tmp res *= val tmp = 0 elif val >=10: if tmp == 0: tmp = 1 res = res + tmp*val tmp = 0 elif val is not None: tmp = tmp * 10 + val else: print("不合法的字符") res += res_before_yi res += tmp return res
test_map = { '九万五千零七十五亿八百零七万九千二百零八': 9507508079208, '四万三千五百二十一': 43521, '三千五百二十一': 3521, '三千五百零八': 3508, '三五六零': 3560, '一万零三十': 10030, '': 0, '零': 0, '一': 1, '二': 2, '三': 3, '四': 4, '五': 5, '六': 6, '七': 7, '八': 8, '九': 9, '十': 10, '十一': 11, '二十': 20, '二十一': 21, '一百': 100, '一百零一': 101, '一百一十': 110, '一百二十三': 123, '一千': 1000, '一千零一': 1001, '一千零一十': 1010, '一千一百': 1100, '一千零二十三': 1023, '一千二百零三': 1203, '一千二百三十': 1230, '一万': 10000, '一万零一': 10001, '一万零一十': 10010, '一万零一百': 10100, '一万一千': 11000, '一万零一十一': 10011, '一万零一百零一': 10101, '一万一千零一': 11001, '一万零一百一十': 10110, '一万一千零一十': 11010, '一万一千一百': 11100, '一万一千一百一十': 11110, '一万一千一百零一': 11101, '一万一千零一十一': 11011, '一万零一百一十一': 10111, '一万一千一百一十一': 11111, '十万零二千三百四十五': 102345, '十二万三千四百五十六': 123456, '十万零三百五十六': 100356, '十万零三千六百零九': 103609, '一百二十三万四千五百六十七': 1234567, '一百零一万零一百零一': 1010101, '一百万零一': 1000001, '一千一百二十三万四千五百六十七': 11234567, '一千零一十一万零一百零一': 10110101, '一千万零一': 10000001, '一亿一千一百二十三万四千五百六十七': 111234567, '一亿零一百零一万零一百零一': 101010101, '一亿零一': 100000001, '十一亿一千一百二十三万四千五百六十七': 1111234567, '一百一十一亿一千一百二十三万四千五百六十七': 11111234567, '一千一百一十一亿一千一百二十三万四千五百六十七': 111111234567, '一万一千一百一十一亿一千一百二十三万四千五百六十七': 1111111234567, '十一万一千一百一十一亿一千一百二十三万四千五百六十七': 11111111234567, '一亿一千一百一十一万一千一百一十一亿一千一百二十三万四千五百六十七': 11111111111234567, }
for each in test_map: try: assert (test_map[each] == convertChineseDigitsToArabic(each)) except: print(each, test_map[each], convertChineseDigitsToArabic(each))
|