Python 根据阿拉伯数字生成中文汉字数字完整教程
一、前言在文档处理、大纲生成、制度文件、报表标题等开发场景中我们经常需要把阿拉伯数字转换成规范中文数字比如1 → 一、10 → 十、15 → 十五、23 → 二十三再衍生出结构化标题第一篇、第十五部分、第三十五章等。Python 标准库没有内置数字转中文的工具函数很多新手自己写逻辑时容易踩坑十几的特殊读法、整十省略个位、拼接标题前缀后缀混乱等问题。本文分三层实现基础版1~99 纯中文数字转换一、十、二十三拓展版封装成通用工具支持生成「第X篇、第X部分」标准文档标题高阶扩展简单拓展支持百位数可自行延伸千、万级大数。全部代码可直接复制使用适配制度大纲、Markdown、Word 文档自动化生成场景。二、基础需求分析1~99中文数字规则先梳理中文数字固定语法规则这是编写代码的核心依据1~9直接输出「一、二…九」10~19十位只读「十」10 十、13 十三十位不带一20~99十位十个位整十省略个位20 二十、25 二十五100单独处理为「一百」。三、基础函数纯数字转中文1~100完整代码defnum_to_plain_chinese(n:int)-str: 阿拉伯数字 1~100 转为纯中文数字 :param n: 输入整数 1 - 100 :return: 纯中文数字字符串 ifnotisinstance(n,int):raiseTypeError(输入必须为整数)ifn1orn100:raiseValueError(当前仅支持 1 ~ 100 的数字转换)digits[,一,二,三,四,五,六,七,八,九]# 分离十位、个位ten_digitn//10unit_digitn%10ifn100:return一百# 个位数 1-9iften_digit0:returndigits[unit_digit]# 十位数 10-19eliften_digit1:ifunit_digit0:return十else:returnf十{digits[unit_digit]}# 二十~九十九else:ifunit_digit0:returnf{digits[ten_digit]}十else:returnf{digits[ten_digit]}十{digits[unit_digit]}# 测试用例if__name____main__:test_nums[1,5,10,12,15,20,36,99,100]fornumintest_nums:print(f{num}→{num_to_plain_chinese(num)})运行输出1 → 一 5 → 五 10 → 十 12 → 十二 15 → 十五 20 → 二十 36 → 三十六 99 → 九十九 100 → 一百代码关键点说明校验输入限制整数范围防止非法数字报错数字映射数组digits下标对应中文空字符串占位规避0的干扰分段逻辑区分 个位数、十几、几十几解决中文特殊读法单独处理100适配长文档百级章节场景。四、业务拓展生成规范文档标题第X篇/第X部分实际开发中单纯的中文数字很少单独使用更多搭配前缀「第」、后缀「篇/部分/章」生成大纲标题。基于上面基础函数封装通用工具统一命名规范方便区分不同层级标题转换函数。4.1 转换为「第X篇」标题函数defnum_to_chinese_article_title(n:int)-str:数字转 第一篇、第十篇、第十五篇 格式标题chinese_strnum_to_plain_chinese(n)returnf第{chinese_str}篇# 测试print(num_to_chinese_article_title(1))# 第一篇print(num_to_chinese_article_title(15))# 第十五篇print(num_to_chinese_article_title(20))# 第二十篇print(num_to_chinese_article_title(99))# 第九十九篇4.2 转换为「第X部分」标题函数defnum_to_chinese_part_title(n:int)-str:数字转 第一部分、第十三部分 格式标题chinese_strnum_to_plain_chinese(n)returnf第{chinese_str}部分print(num_to_chinese_part_title(12))# 第十二部分4.3 统一工具类封装项目推荐写法多个转换函数整合为工具类导入一处全局使用命名区分层级便于后期维护classChineseNumUtil:digits[,一,二,三,四,五,六,七,八,九]classmethoddefnum_to_plain_chinese(cls,n:int)-str:ifnotisinstance(n,int):raiseTypeError(输入必须为整数)ifn1orn100:raiseValueError(仅支持 1 ~ 100)tenn//10unitn%10ifn100:return一百iften0:returncls.digits[unit]eliften1:return十ifunit0elsef十{cls.digits[unit]}else:returnf{cls.digits[ten]}十ifunit0elsef{cls.digits[ten]}十{cls.digits[unit]}classmethoddefnum_to_chinese_article_title(cls,n:int)-str:第X篇returnf第{cls.num_to_plain_chinese(n)}篇classmethoddefnum_to_chinese_part_title(cls,n:int)-str:第X部分returnf第{cls.num_to_plain_chinese(n)}部分# 调用示例if__name____main__:utilChineseNumUtilprint(util.num_to_plain_chinese(15))print(util.num_to_chinese_article_title(15))print(util.num_to_chinese_part_title(15))五、常见开发踩坑点坑1十几数字错误输出「一十X」很多新手直接拼接一十出现「一十三」不符合中文阅读习惯。解决办法单独判断十位等于1的分支省略十位的「一」。坑2未做输入校验传入浮点数、负数、超大数字传入10.5、-3、200会直接数组下标越界。解决办法函数开头增加类型、范围校验主动抛出异常方便调试。坑3多个标题转换逻辑重复复制粘贴冗余代码分别写「篇」「部分」两套数字转换逻辑后期修改要多处改动。解决办法抽离底层纯数字转换公共函数上层仅拼接前后缀。坑4函数命名混乱无法区分层级直接命名convert_num后期新增1.1、1、① 等格式转换时难以区分。解决办法采用统一命名规范num_to_chinese_xxx_title后缀区分篇、部分、小节。六、简单扩展支持百以上大数简易版如果业务需要超过100的数字可简单扩展百位逻辑示例defnum_to_plain_chinese_extend(n:int)-str:digits[,一,二,三,四,五,六,七,八,九]ifn100:return一百if101n199:hundred一百restn-100ifrest0:returnhundredreturnhundrednum_to_plain_chinese(rest)# 其余复用原有逻辑ten_digitn//10unit_digitn%10iften_digit0:returndigits[unit_digit]eliften_digit1:return十ifunit_digit0elsef十{digits[unit_digit]}else:returnf{digits[ten_digit]}十ifunit_digit0elsef{digits[ten_digit]}十{digits[unit_digit]}print(num_to_plain_chinese_extend(115))# 一百十五七、总结中文数字转换核心是拆分十位、个位特殊处理10~19省略「一」的语法分层开发底层公共函数输出纯中文数字上层封装各类文档标题格式工具类集中管理转换逻辑统一命名便于项目维护和扩展增加输入校验规避非法参数导致的程序崩溃可根据业务需求自由拓展后缀快速生成「第X章、第X节」等标准化大纲标题广泛应用于文档自动化、爬虫文本处理、报表生成场景。