当前位置: 首页 > ai >正文

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

文章目录

  • 1. 引言
  • 2. 需求分析‌
  • 3. 核心实现思路‌
  • 4. 完整代码实现‌

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. 完整代码实现‌

import jsondef number_to_chinese(num):"""将0-9999的整数转换为中文数字"""units = ['', '十', '百', '千']digits = {0: '零', 1: '一', 2: '二', 3: '三', 4: '四',5: '五', 6: '六', 7: '七', 8: '八', 9: '九'}if num == 0:return digits[0]num_str = str(num)length = len(num_str)result = []has_zero = False  # 标记前一位是否是零for i, n in enumerate(num_str):n = int(n)pos = length - i - 1  # 当前位数(0=个位,1=十位...if n == 0:if not has_zero and pos != 0:result.append(digits[0])has_zero = Trueelse:if has_zero:result.pop()  # 删除前导零has_zero = Falseresult.append(digits[n])if pos > 0:result.append(units[pos])# 处理10-19的特殊情况(如10→十,11→十一)if 10 <= num <= 19 and length == 2:result = result[1:] if num == 10 else ['十' + digits[int(num_str[1])]]return ''.join(result).replace('零千', '零').rstrip('零')def validate_input(prompt):"""验证用户输入是否为0-9999的整数"""while True:user_input = input(prompt)try:num = int(user_input)if 0 <= num <= 9999:return numprint("错误:请输入0到9999之间的整数!")except ValueError:print("错误:输入必须为整数!")def generate_mapping(max_num):"""生成中文数字映射字典"""return {number_to_chinese(i): i for i in range(max_num + 1)}def main():max_num = validate_input("请输入最大阿拉伯数字(0-9999): ")mapping = generate_mapping(max_num)# 保存为JSON文件filename = f"chinese_numbers_{max_num}.json"with open(filename, 'w', encoding='utf-8') as f:json.dump(mapping, f, ensure_ascii=False, indent=2)print(f"生成成功!映射文件已保存为 {filename}")# 读取JSON文件with open(filename, 'r', encoding='utf-8') as f:loaded_dict = json.load(f)print("成功读取字典:", loaded_dict)if __name__ == "__main__":main()

关键代码解析‌

1. 数字转换函数‌

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

2. 输入验证‌

  • 使用循环强制用户输入合法数值,防止程序崩溃。

3. 文件输出‌

  • ensure_ascii=False确保JSON文件直接显示中文而非Unicode转义。

运行示例‌

1. 输入验证‌

请输入最大阿拉伯数字(0-9999: abc
错误:输入必须为整数!
请输入最大阿拉伯数字(0-9999: 10000
错误:请输入09999之间的整数!

2. 生成结果‌,输入10时,输出文件内容:

{"零": 0,"一": 1,"二": 2,"三": 3,"四": 4,"五": 5,"六": 6,"七": 7,"八": 8,"九": 9,"十": 10
}

输入9999运行结果:

在这里插入图片描述

http://www.xdnf.cn/news/4591.html

相关文章:

  • WebFlux与HttpStreamable关系解析
  • HuggingFace与自然语言处理(从框架学习到经典项目实践)[ 01 API操作 ]
  • 极简远程革命:节点小宝 — 无公网IP的极速内网穿透远程解决方案
  • 《开源先锋Apache软件基金会:历史沿革、顶级项目与行业影响》
  • 新能源汽车赛道变局:传统车企子品牌私有化背后的战略逻辑
  • java 破解aspose.words 18.6 使用
  • 如何使用 QuickAPI 推动医院数据共享 —— 基于数据仓库场景的实践
  • 学习笔记:数据库——事务
  • 启智平台调试 qwen3 4b ms-swift
  • 基于Kubernetes的Apache Pulsar云原生架构解析与集群部署指南(下)
  • IEEE出版|2025年通信网络与智能系统工程国际会议(CNSE2025)
  • uniapp中score-view中的文字无法换行问题。
  • 《spark》
  • 设计模式-策略模式
  • C++ 工具链与开发实践:构建安全、高效与创新的开发生态
  • C++之“继承”
  • C++面向对象编程入门:从类与对象说起(一)
  • 正则表达式实战指南:原理、口诀与高频场景案例
  • 如何在 C# 和 .NET 中打印 DataGrid
  • 【即插即用涨点模块】DSConv动态蛇形卷积:自适应聚焦细长弯曲的局部结构特征,助力分割高效提点【附源码+注释】
  • 【无标题】阿达萨达
  • 安卓基础(封装引用)
  • 视频编解码学习9之照相机历史
  • 【 Redis | 实战篇 短信登录 】
  • 区块链内容创作全攻略:海报、白皮书与视频的视觉化革命
  • idea出现tomcat不能正确部署的问题--解决方案
  • 用电信息采集中的天线种类
  • 链表的面试题4之合并有序链表
  • 大数据TopK问题
  • 什么是延迟队列?RabbitMQ 如何实现延迟队列?