Python实现把数字转换成中文


Posted in Python onJune 29, 2015

周末在家,写了个小程序,用于将阿拉伯数字转换化大写中文。程序没经过任何优化,出没经过详细的测试,挂到网上,方便将来有需要的时候直接拿来用。

#!/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数组的处理代码
Jan 04 Python
python print 按逗号或空格分隔的方法
May 02 Python
Flask核心机制之上下文源码剖析
Dec 25 Python
实例介绍Python中整型
Feb 11 Python
初探利用Python进行图文识别(OCR)
Feb 26 Python
python BlockingScheduler定时任务及其他方式的实现
Sep 19 Python
浅谈Django2.0 加xadmin踩的坑
Nov 15 Python
使用Python进行防病毒免杀解析
Dec 13 Python
PyQt5 文本输入框自动补全QLineEdit的实现示例
May 13 Python
PyQT5速成教程之Qt Designer介绍与入门
Nov 02 Python
python+opencv实现视频抽帧示例代码
Jun 11 Python
Python Pandas模块实现数据的统计分析的方法
Jun 24 Python
Python中if __name__ == '__main__'作用解析
Jun 29 #Python
django接入新浪微博OAuth的方法
Jun 29 #Python
python链接Oracle数据库的方法
Jun 28 #Python
python写日志封装类实例
Jun 28 #Python
Python实现的简单hangman游戏实例
Jun 28 #Python
python实现矩阵乘法的方法
Jun 28 #Python
python实现的用于搜索文件并进行内容替换的类实例
Jun 28 #Python
You might like
php常用字符串比较函数实例汇总
2014/11/24 PHP
利用PHP抓取百度阅读的方法示例
2016/12/18 PHP
关于全局变量和局部变量的那些事
2013/01/11 Javascript
如何使用jquery控制CSS样式,并且取消Css样式(如背景色,有实例)
2013/07/09 Javascript
使用jquery解析XML的方法
2014/09/05 Javascript
jQuery实现拖动调整表格单元格大小的代码实例
2015/01/13 Javascript
javascript如何实现暂停功能
2015/11/06 Javascript
Markdown与Bootstrap相结合实现图片自适应属性
2016/05/04 Javascript
jQuery height()、innerHeight()、outerHeight()函数的区别详解
2016/05/23 Javascript
全选复选框JavaScript编写小结(附代码)
2017/08/16 Javascript
如何解决webpack-dev-server代理常切换问题
2019/01/09 Javascript
详解使用webpack+electron+reactJs开发windows桌面应用
2019/02/01 Javascript
说说Vue.js中的functional函数化组件的使用
2019/02/12 Javascript
kafka调试中遇到Connection to node -1 could not be established. Broker may not be available.
2019/09/17 Javascript
[00:32]DOTA2上海特级锦标赛 COL战队宣传片
2016/03/04 DOTA
Python通过解析网页实现看报程序的方法
2014/08/04 Python
Python Tkinter GUI编程入门介绍
2015/03/10 Python
python实现的jpg格式图片修复代码
2015/04/21 Python
Python实现高效求解素数代码实例
2015/06/30 Python
编写Python爬虫抓取暴走漫画上gif图片的实例分享
2016/04/20 Python
Python3.6安装及引入Requests库的实现方法
2018/01/24 Python
python 判断linux进程,并杀死进程的实现方法
2019/07/01 Python
Python操作Mongodb数据库的方法小结
2019/09/10 Python
结合OpenCV与TensorFlow进行人脸识别的实现
2019/10/10 Python
基于Python爬取爱奇艺资源过程解析
2020/03/02 Python
CSS3样式linear-gradient的使用实例
2017/01/16 HTML / CSS
HTML5 Blob对象的具体使用
2020/05/22 HTML / CSS
销售实习自我鉴定
2013/12/07 职场文书
任命书怎么写
2014/06/04 职场文书
2015秋季幼儿园开学寄语
2015/03/25 职场文书
社区艾滋病宣传活动总结
2015/05/07 职场文书
民事答辩状格式范文
2015/05/21 职场文书
初中班主任培训心得体会
2016/01/07 职场文书
《黄道婆》教学反思
2016/02/22 职场文书
详解Python中的进程和线程
2021/06/23 Python
MySQL开启事务的方式
2021/06/26 MySQL