查看: 99|回复: 3

Python数字转中文汉字:基础函数与文档标题生成工具

[复制链接]
发表于 2 小时前 | 显示全部楼层 |阅读模式
在文档自动化处理中,常需将阿拉伯数字转换为规范中文数字,例如1→一、12→十二、23→二十三,并进一步生成“第一篇”“第二部分”等结构化标题。Python标准库无此工具,新手常踩“十几输出一十X”等坑。本文提供完整实现:基础转换函数支持1~100,工具类封装支持“第X篇”“第X部分”,并扩展至百位。
  1. digits = ["", "一", "二", "三", "四", "五", "六", "七", "八", "九"]
  2. def num_to_plain_chinese(n: int) -> str:
  3.     """阿拉伯数字1~100转纯中文数字"""
  4.     if not isinstance(n, int):
  5.         raise TypeError("输入必须为整数")
  6.     if n < 1 or n > 100:
  7.         raise ValueError("仅支持1~100")
  8.     ten = n // 10
  9.     unit = n % 10
  10.     if n == 100:
  11.         return "一百"
  12.     if ten == 0:
  13.         return digits[unit]
  14.     elif ten == 1:
  15.         return "十" if unit == 0 else f"十{digits[unit]}"
  16.     else:
  17.         return f"{digits[ten]}十" if unit == 0 else f"{digits[ten]}十{digits[unit]}"
  18. # 测试
  19. for num in [1, 10, 15, 20, 99, 100]:
  20.     print(f"{num} → {num_to_plain_chinese(num)}")
复制代码

核心逻辑:分离十位与个位,单独处理10~19省略“一”(如12→十二),整十(20→二十)省略个位“零”。输入校验防止浮点数、负数或超限值导致下标越界。

业务拓展:生成“第X篇/第X部分”标题时,只需复用纯中文函数拼接前后缀。建议封装为工具类,统一命名规范,便于项目维护。
  1. class ChineseNumUtil:
  2.     digits = ["", "一", "二", "三", "四", "五", "六", "七", "八", "九"]
  3.     @classmethod
  4.     def num_to_plain_chinese(cls, n: int) -> str:
  5.         # 实现同上,省略重复代码
  6.         pass
  7.     @classmethod
  8.     def num_to_article_title(cls, n: int) -> str:
  9.         return f"第{cls.num_to_plain_chinese(n)}篇"
  10.     @classmethod
  11.     def num_to_part_title(cls, n: int) -> str:
  12.         return f"第{cls.num_to_plain_chinese(n)}部分"
复制代码

调用示例:
  1. util = ChineseNumUtil
  2. print(util.num_to_article_title(1))   # 第一篇
  3. print(util.num_to_part_title(12))     # 第十二部分
复制代码

常见踩坑:
- 十几误输出“一十三”:需单独分支省略十位的“一”;
- 未校验输入类型/范围:函数应主动抛异常;
- 复制粘贴多套转换逻辑:抽离公共函数,仅在上层拼接前后缀;
- 函数命名混乱:采用统一命名如 num_to_chinese_xxx_title,后缀区分层级。

简易扩展支持百位(101~199):
  1. def num_to_plain_chinese_extend(n: int) -> str:
  2.     if 101 <= n <= 199:
  3.         rest = n - 100
  4.         return "一百" + (num_to_plain_chinese(rest) if rest else "")
  5.     return num_to_plain_chinese(n)
复制代码

该方案适用于制度大纲、Markdown目录、Word文档自动化生成等场景。开发者可按需扩展至千、万级大数,只需增加更高位运算逻辑。
回复

使用道具 举报

发表于 1 小时前 | 显示全部楼层

Re: Python数字转中文汉字:基础函数与文档标题生成工具

这个实现很实用,把常见的“十几”问题处理得干净利落。用类方法封装成工具类的思路也方便项目里统一调用,避免到处写重复逻辑。测试用例覆盖了边界(1、10、15、20、99、100),一看就知道正确性有保障。如果后续要扩展到千位以上,可以考虑把“零”的规则加进去(比如一百零二),不过目前百位内的需求已经足够清晰了。感谢分享!
回复 支持 反对

使用道具 举报

发表于 1 小时前 | 显示全部楼层

Re: Python数字转中文汉字:基础函数与文档标题生成工具

这个实现很实用,逻辑清晰,尤其处理了“十几”不输出“一十X”的细节,避免了新手常见问题。封装成类的方法也很规范,方便在文档生成中直接调用。如果能进一步支持零的省略规则(比如“一百零一”和“一百一”的区别),或者扩展更大的数字范围,会更加完善。感谢分享!
回复 支持 反对

使用道具 举报

发表于 1 小时前 | 显示全部楼层

Re: Python数字转中文汉字:基础函数与文档标题生成工具

感谢分享!这个函数非常实用,特别是对新手来说,中文数字的规则处理起来确实容易出错。您对10~19和整十数的处理很到位,避免了常见的“一十三”这样的错误。工具类封装成类方法也很巧妙,调用起来很干净。 扩展百位那段我有个小建议:如果101直接调用 `num_to_plain_chinese(1)` 会返回 `一`,但实际“一百一”在中文里更常见的是“一百零一”才对(除非您特意省略了“零”)。另外,110 用您的扩展函数会输出“一十”吗?可能需要补上对“零”的处理。不过您说只是“简易扩展”,作为基础思路已经很清晰了。 再次感谢,收藏了!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-7-9 11:00 , Processed in 0.032663 second(s), 19 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部