1. 弁言
在中文文本处理和天然语言处理(NLP)应用中,经常必要将中文数字转换为阿拉伯数字。本文将先容如何利用Python根据用户从控制台输入的数字范围,天生相应的中文数字到阿拉伯数字的映射字典,并将结果生存为JSON文件。
2. 需求分析
开发一个Python步伐,根据用户输入的数字(最大9999),主动天生中文数字与阿拉伯数字的映射字典,并生存为JSON文件。比方:输入10时,天生{“零”:0, “一”:1,…, “十”:10}。
3. 核心实现思绪
1. 中文数字转换规则
- 单位体系:万(凌驾9999的部分)、千、百、十、个位。
- 零处理:一连零仅生存一个(如205→“二百零五”),末端零省略(如100→“一百”)。
- 特殊读法:10读作“十”而非“一十”。
2. 用户输入验证
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运行结果:
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |