Python数字字符串转英文单词:现有硬编码代码的优化请求
数字字符串转英文单词的可扩展实现方案
针对现有逐if分支硬编码、扩展性差的问题,根据后续的扩展规模,可选择两种可落地的实现路径:
方案1:最小改动替换为字典映射
如果后续需要支持的转换数字数量不多、没有全范围通用数字的需求,直接把分散的if判断替换为独立的键值映射字典是成本最低的优化方式:
- 把「数字字符串-对应英文单词」的匹配关系统一存放到单独的字典中,和核心循环逻辑完全解耦
- 后续新增转换规则只需要在字典里补条目,完全不需要修改循环判断的代码
- 自带兜底取值能力,避免漏配规则时直接抛出程序异常
示例代码:
# 转换规则映射表,新增规则直接在此处补充即可 num_rule_map = { '33': 'thirty three', '12': 'twelve', '45': 'forty five' } source_nums = ['33', '12', '45'] for num_str in source_nums: # 用get方法设置默认值,避免触发KeyError print(num_rule_map.get(num_str, f'{num_str} 暂未配置转换规则'))
原代码中
for i in range(len(n))的写法属于冗余写法,因为循环逻辑里根本没有用到索引值i,直接迭代列表元素即可,没必要额外生成索引值。
方案2:数位拆解实现全范围通用转换
如果后续需要覆盖0-99甚至更大范围的通用数字转换,不需要逐个手动编写映射规则,只需要定义基础数位的不规则拼写词表,按数位组合逻辑自动生成转换结果,几乎零成本覆盖全范围数字:
- 预定义小于20的特殊数字(这类数字没有通用拼写规则,需要单独配置)
- 预定义十位的拼写规则,自动组合生成个位的拼写
- 所有不规则的特殊拼写只需要配置一次,后续涉及该数位的数字转换会自动复用
示例代码:
# 特殊不规则拼写配置 special_words = { 0: '', 1: 'one', 2: 'two', 3: 'three', 4: 'four', 5: 'five', 6: 'six', 7: 'seven', 8: 'eight', 9: 'nine', 10: 'ten', 11: 'eleven', 12: 'twelve', 13: 'thirteen', 15: 'fifteen', 18: 'eighteen' } # 十位特殊拼写配置 ten_place_words = { 2: 'twenty', 3: 'thirty', 4: 'forty', 5: 'fifty', 8: 'eighty' } def convert_num_str_to_en(num_str): # 完成字符串到整数的转换,用于数位拆解 target_num = int(num_str) # 小于20的数字直接匹配特殊词表 if target_num < 20: return special_words[target_num] # 拆解十位、个位数值 ten_value = target_num // 10 unit_value = target_num % 10 # 拼接完整英文单词 ten_part = ten_place_words.get(ten_value, special_words[ten_value] + 'ty') unit_part = special_words[unit_value] return ' '.join([part for part in [ten_part, unit_part] if part]) # 调用测试 source_nums = ['33', '12', '45'] for num_str in source_nums: print(convert_num_str_to_en(num_str))
内容的提问来源于stack exchange,提问作者user14921650
相关产品推荐
相关产品推荐

