Python中递归调用ord()实现字符串转数字的代码问题咨询
代码问题排查&修正
你的代码存在两处核心错误:
- 递归参数调用非法:
ord()仅支持传入单个字符组成的字符串,你给递归函数传入ord(s[1:]),s[1:]是子字符串,会直接触发TypeError。 - 返回值类型不匹配:基线条件返回空列表
[],但递归分支用整数ord(s[0])做加法运算,整数和列表无法相加,同样会触发类型错误。
需求对应实现
场景1:将字符串每个字符的ASCII值转为数值列表
def string_to_num(s): # 基线条件:空字符串无需处理,直接返回空列表终止递归 if s == "": return [] # 递归条件:拼接当前字符的ASCII值 + 剩余子串的处理结果 return [ord(s[0])] + string_to_num(s[1:])
场景2:将纯数字字符串(如"1234")转为对应的整数数值
def string_to_num(s): # 基线条件:单个字符无需拆分,直接返回对应整数 if len(s) == 1: return int(s) # 递归条件:当前位数值乘以对应数位权重 + 剩余子串的转换结果 return int(s[0]) * (10 ** (len(s)-1)) + string_to_num(s[1:])
递归条件设置逻辑
- 基线条件:对应不需要再拆分的最小子问题,直接返回已知结果即可,空字符串、长度为1的字符串都是字符串处理类递归的典型基线条件。
- 递归条件:把当前问题拆成「当前步处理内容」+「更小的子问题」两部分,处理完当前步内容后,把剩余部分交给递归函数处理,再合并两部分的结果得到当前问题的输出。
内容的提问来源于stack exchange,提问作者lilai
相关产品推荐
相关产品推荐

