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 json def 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 = true else: if has_zero: result.pop() # 删除前导零 has_zero = false result.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 num print("错误:请输入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 错误:请输入0到9999之间的整数!
2. 生成结果,输入10时,输出文件内容:
{ "零": 0, "一": 1, "二": 2, "三": 3, "四": 4, "五": 5, "六": 6, "七": 7, "八": 8, "九": 9, "十": 10 }
输入9999运行结果:
到此这篇关于python实现中文数字与阿拉伯数字映射生成器(支持0-9999)的完整代码的文章就介绍到这了,更多相关python中文数字转阿拉伯数字内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论