Python实现中文数字与阿拉伯数字映射天生器(支持0-9999)

[复制链接]
发表于 2025-9-18 05:35:16 | 显示全部楼层 |阅读模式
1. 弁言

在中文文本处理和天然语言处理(NLP)应用中,经常必要将中文数字转换为阿拉伯数字。本文将先容如何利用Python根据用户从控制台输入的数字范围,天生相应的中文数字到阿拉伯数字的映射字典,并将结果生存为JSON文件。
2. 需求分析‌

开发一个Python步伐,根据用户输入的数字(最大9999),主动天生中文数字与阿拉伯数字的映射字典,并生存为JSON文件。比方:输入10时,天生{“零”:0, “一”:1,…, “十”:10}。
3. 核心实现思绪‌

1. 中文数字转换规则‌


  • 单位体系‌:万(凌驾9999的部分)、千、百、十、个位。
  • 零处理‌:一连零仅生存一个(如205→“二百零五”),末端零省略(如100→“一百”)。
  • 特殊读法‌:10读作“十”而非“一十”。
2. 用户输入验证‌


  • 确保输入为整数、且在0~9999之间。
3. JSON文件天生‌


  • 利用Python标准库json生存字典,生存Unicode字符。
4. 完备代码实现‌

  1. import json
  2. def number_to_chinese(num):
  3.     """将0-9999的整数转换为中文数字"""
  4.     units = ['', '十', '百', '千']
  5.     digits = {0: '零', 1: '一', 2: '二', 3: '三', 4: '四',
  6.               5: '五', 6: '六', 7: '七', 8: '八', 9: '九'}
  7.     if num == 0:
  8.         return digits[0]
  9.     num_str = str(num)
  10.     length = len(num_str)
  11.     result = []
  12.     has_zero = False  # 标记前一位是否是零
  13.     for i, n in enumerate(num_str):
  14.         n = int(n)
  15.         pos = length - i - 1  # 当前位数(0=个位,1=十位...)
  16.         if n == 0:
  17.             if not has_zero and pos != 0:
  18.                 result.append(digits[0])
  19.                 has_zero = True
  20.         else:
  21.             if has_zero:
  22.                 result.pop()  # 删除前导零
  23.                 has_zero = False
  24.             result.append(digits[n])
  25.             if pos > 0:
  26.                 result.append(units[pos])
  27.     # 处理10-19的特殊情况(如10→十,11→十一)
  28.     if 10 <= num <= 19 and length == 2:
  29.         result = result[1:] if num == 10 else ['十' + digits[int(num_str[1])]]
  30.     return ''.join(result).replace('零千', '零').rstrip('零')
  31. def validate_input(prompt):
  32.     """验证用户输入是否为0-9999的整数"""
  33.     while True:
  34.         user_input = input(prompt)
  35.         try:
  36.             num = int(user_input)
  37.             if 0 <= num <= 9999:
  38.                 return num
  39.             print("错误:请输入0到9999之间的整数!")
  40.         except ValueError:
  41.             print("错误:输入必须为整数!")
  42. def generate_mapping(max_num):
  43.     """生成中文数字映射字典"""
  44.     return {number_to_chinese(i): i for i in range(max_num + 1)}
  45. def main():
  46.     max_num = validate_input("请输入最大阿拉伯数字(0-9999): ")
  47.     mapping = generate_mapping(max_num)
  48.     # 保存为JSON文件
  49.     filename = f"chinese_numbers_{max_num}.json"
  50.     with open(filename, 'w', encoding='utf-8') as f:
  51.         json.dump(mapping, f, ensure_ascii=False, indent=2)
  52.     print(f"生成成功!映射文件已保存为 {filename}")
  53.     # 读取JSON文件
  54.     with open(filename, 'r', encoding='utf-8') as f:
  55.         loaded_dict = json.load(f)
  56.         print("成功读取字典:", loaded_dict)
  57. if __name__ == "__main__":
  58.     main()
复制代码
关键代码解析‌
1. 数字转换函数‌


  • 动态单位拼接‌:根据数字位置添加“千、百、十”等单位。
  • 零处理优化‌:通过has_zero标志避免重复零,如2001→“二千零一”。
  • 边界特判‌:单独处理10-19的读法,确保符合中文风俗。
2. 输入验证‌


  • 利用循环逼迫用户输入合法数值,防止步伐瓦解。
3. 文件输出‌


  • ensure_ascii=False确保JSON文件直接表现中文而非Unicode转义。
运行示例‌
1. 输入验证‌
  1. 请输入最大阿拉伯数字(0-9999): abc
  2. 错误:输入必须为整数!
  3. 请输入最大阿拉伯数字(0-9999): 10000
  4. 错误:请输入0到9999之间的整数!
复制代码
2. 天生结果‌,输入10时,输出文件内容:
  1. {
  2.   "零": 0,
  3.   "一": 1,
  4.   "二": 2,
  5.   "三": 3,
  6.   "四": 4,
  7.   "五": 5,
  8.   "六": 6,
  9.   "七": 7,
  10.   "八": 8,
  11.   "九": 9,
  12.   "十": 10
  13. }
复制代码
输入9999运行结果:


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表