Python中如何对输入的字符串形式数字相加并返回字符串结果
英文数字字符串相加实现(无外部库)
核心优化思路
之前用列表通过索引映射的方式效率低,本质是字符串转数字时需要遍历列表查找索引(时间复杂度O(n))。改用双向字典映射可将查找操作降到O(1),大幅提升效率,尤其当支持的数字范围扩大时优势更明显。
实现步骤
- 构建双向映射字典
先定义英文数字到阿拉伯数字的映射,再通过反转字典得到反向映射,避免重复手写:
# 定义英文到数字的基础映射(可按需扩展至更大数字,比如twenty、hundred等) word_to_num = { 'zero': 0, 'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5, 'six': 6, 'seven': 7, 'eight': 8, 'nine': 9, 'ten': 10, 'eleven': 11, 'twelve': 12, 'thirteen': 13, 'fourteen': 14, 'fifteen': 15, 'sixteen': 16, 'seventeen': 17, 'eighteen': 18, 'nineteen': 19, 'twenty': 20 } # 反转字典生成数字到英文的映射 num_to_word = {value: key for key, value in word_to_num.items()}
- 实现相加逻辑
完成“英文转数字→求和→数字转英文”的完整流程:
def add_word_numbers(num1_str, num2_str): # 统一转小写避免大小写问题 num1 = word_to_num[num1_str.lower()] num2 = word_to_num[num2_str.lower()] total = num1 + num2 return num_to_word[total]
测试示例
# 测试题目示例输入 print(add_word_numbers('three', 'seven')) # 输出: 'ten'
可选扩展:异常处理
如果需要处理无效输入(比如不在映射范围内的字符串),可添加异常捕获:
def add_word_numbers_safe(num1_str, num2_str): try: num1 = word_to_num[num1_str.lower()] num2 = word_to_num[num2_str.lower()] total = num1 + num2 return num_to_word.get(total, f"Unsupported number result: {total}") except KeyError: invalid_inputs = [] if num1_str.lower() not in word_to_num: invalid_inputs.append(num1_str) if num2_str.lower() not in word_to_num: invalid_inputs.append(num2_str) return f"Invalid input(s): {', '.join(invalid_inputs)}"
内容的提问来源于stack exchange,提问作者sneedham16
相关产品推荐
相关产品推荐

