Python数字转大写英文函数运行仅输出空白无转换结果问题排查
错误原因分析
- 核心返回逻辑错误:
return newstring缩进位置错误,被嵌套在start_position < 1的else分支中,且位于该分支的return "INVALID"语句之后,永远不会被执行。当入参合法、走完字符处理逻辑后,函数无显式返回值,默认返回None,打印时就会呈现空白内容。 - 入口代码书写错误:主函数判断语句应为
if __name__ == "__main__",原代码缺少变量两侧的双下划线,导致入口打印逻辑不会自动执行。 - 内容丢失缺陷:仅处理了指定区间内的字符,没有将
end_position之后的原字符串内容拼接回结果,会丢失区间外的后半段内容。 - 冗余空格问题:初始化
newstring时默认加了前置空格,且数字替换时前后都额外拼接空格,会产生多余的连续空格。
修复方案
- 调整
return newstring的缩进层级,与最外层的入参判断平级,确保处理完字符后能正常返回结果。 - 修正主函数的
__name__、__main__的双下划线写法,保证入口代码正常执行。 - 处理完指定区间的字符后,将
end_position索引之后的原字符串内容拼接至结果末尾,保留区间外的原始内容。 - 移除
newstring初始化的前置空格,新增连续空格清理逻辑,避免输出多余空格。 - 删除冗余的
new_string变量,直接用原字符串长度做参数合法性判断,简化逻辑。
修复后完整代码
def convert_digits(input_string, start_position, end_position): newstring = "" digit_mapping = { '0': 'ZERO', '1': 'ONE', '2': 'TWO', '3': 'THREE', '4': 'FOUR', '5': 'FIVE', '6': 'SIX', '7': 'SEVEN', '8': 'EIGHT', '9': 'NINE' } # 参数合法性校验 if start_position >= 1 and end_position <= len(input_string) and start_position < end_position: # 拼接指定区间前的原始内容 newstring += input_string[:start_position-1] # 处理指定区间内的字符 for index in range(start_position - 1, end_position): if input_string[index].isdigit(): mapped = digit_mapping[input_string[index]] newstring += f" {mapped} " else: newstring += input_string[index] # 拼接指定区间后的原始内容 newstring += input_string[end_position:] # 清理多余的连续空格 newstring = " ".join(newstring.split()) return newstring else: return "INVALID" if __name__ == "__main__": print(convert_digits("you are a 4king 5shole", 1, 21))
运行效果
调用示例代码后输出结果为:you are a FOUR king FIVE shole
符合指定区间内数字转大写英文的预期。
内容的提问来源于stack exchange,提问作者Hamid Munawar
相关产品推荐
相关产品推荐

