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

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运行结果:

在这里插入图片描述

相关文章:

  • 《开源先锋Apache软件基金会:历史沿革、顶级项目与行业影响》
  • Android单例模式知识总结
  • 使用迁移学习的自动驾驶汽车信息物理系统安全策略
  • Java数据结构——Queue
  • LeetCode热题100--54.螺旋矩阵--中等
  • 商业中的人工智能 (AI) 是什么?
  • 大疆无人机(全系列,包括mini)拉流至电脑,实现直播
  • 【链表扫盲】FROM GPT
  • 第四章 OpenCV篇—图像梯度与边缘检测—Python
  • Rust包、crate与模块管理
  • 【 Redis | 实战篇 短信登录 】
  • CSS:元素显示模式与背景
  • 【图片合并PDF】一次性将多个文件夹里的图片批量按文件夹为单位合并PDF,多个文件夹图片合并PDF,基于WPF的实现方案
  • WPF中解决数据绑定不匹配的问题
  • 【wpf】11 在WPF中实现父窗口蒙版效果:原理详解与进阶优化
  • 【AI提示词】马斯洛需求分析专家
  • WPF主窗体子窗体关联方法
  • 华为云Astro后端开发中对象、事件、脚本、服务编排、触发器、工作流等模块的逻辑关系如何?以iotDA数据传输过程举例演示元素工作过程
  • 网易游戏 Flink 云原生实践
  • DeFi开发系统软件开发:技术架构与生态重构
  • 苹果Safari浏览器上的搜索量首次下降
  • 王日春已任教育部社会科学司司长,此前系人教社总编辑
  • 美联储主席:不打算先发制人地降息,将继续观望
  • 上市不足一年,吉利汽车拟私有化极氪并合并:整合资源,杜绝重复投入
  • 长三角多地重启游轮跨市游,“恢复苏杭夜航船”呼声又起
  • 央行:上市公司回购增持股票自有资金比例要求从30%下调至10%