news 2026/6/9 19:02:47

Python基础练习16.字符逆序问题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python基础练习16.字符逆序问题

利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。

1. 使用递归函数
# 定义一个名为 pan_pan 的递归函数,参数 n 表示需要处理的数据数量 def pan_pan(n): # 初始化变量 next,用于存储用户输入的每个数字 next = 0 # 基本情况判断:如果 n 小于等于 1,表示这是最后一个需要输入的数字 if n <= 1: # 提示用户输入一个数字 next = input("Enter a number: ") # 打印当前输入的数字 print(next) # 递归情况:如果 n 大于 1,表示还有多个数字需要输入 else: # 提示用户输入一个数字 next = input("Enter a number: ") # 递归调用 pan_pan 函数,参数 n-1 表示减少一个需要输入的数字 pan_pan(n-1) # 递归返回后,打印当前输入的数字 print(next) # 初始化变量 i,设置需要输入的数字个数为 5 i = 5 # 调用 pan_pan 函数,开始递归过程 pan_pan(i) 执行流程说明:

结果:

Enter a number: e
Enter a number: fr
Enter a number: g
Enter a number: 4
Enter a number: t
t
4
g
fr
e

或:

# coding=gbk def reverse_print(index, chars): """ 递归函数,用于反向打印字符 参数: index: 当前处理的字符索引 chars: 存储字符的列表 """ # 基本情况:当索引等于字符列表长度时,停止递归 if index == len(chars): return # 递归调用:先处理后面的字符,再打印当前的字符 reverse_print(index + 1, chars) # 先递归处理下一个字符 # 打印当前字符(在递归返回时打印,实现反向效果) print(chars[index], end='') # 主程序 def main(): # 提示用户输入5个字符 print("请输入5个字符(连续输入,不要加逗号): ", end='') # 获取用户输入的字符串 user_input = input() # 确保输入至少有5个字符,如果不够则用空格补齐 if len(user_input) < 5: # 如果输入不足5个字符,用空格补齐到5个 user_input = user_input.ljust(5) elif len(user_input) > 5: # 如果输入超过5个字符,只取前5个 user_input = user_input[:5] # 将字符串转换为字符列表,方便处理 chars = list(user_input) print("反向顺序打印结果: ", end='') # 调用递归函数,从索引0开始处理 reverse_print(0, chars) print() # 打印换行,使输出更美观 # 执行主程序 if __name__ == "__main__": main()

结果:
请输入5个字符(连续输入,不要加逗号): jisnf
反向顺序打印结果: fnsij

2. 简化版递归
# coding=gbk def reverse_print_simple(chars, length): """ 简化的递归函数,直接处理字符串 参数: chars: 要处理的字符串 length: 当前要处理的字符串长度 """ # 基本情况:如果字符串为空或长度为0,停止递归 if length == 0: return # 打印最后一个字符(注意索引从0开始,所以最后一个字符的索引是length-1) print(chars[length - 1], end='') # 递归调用:处理剩下的字符串(去掉最后一个字符) reverse_print_simple(chars, length - 1) # 主程序 def main_simple(): print("请输入5个字符: ", end='') user_input = input() # 处理输入,确保正好5个字符 if len(user_input) < 5: user_input = user_input.ljust(5) elif len(user_input) > 5: user_input = user_input[:5] print("反向顺序打印结果: ", end='') # 调用递归函数 reverse_print_simple(user_input, 5) print() # 执行程序 if __name__ == "__main__": main_simple()

结果:

请输入5个字符: jisnk
反向顺序打印结果: knsij

3. 使用递归读取和打印
def read_and_reverse_print(n): """ 递归读取n个字符并反向打印 参数: n: 还需要读取的字符数量 """ # 基本情况:当n为0时,停止递归 if n <= 0: return # 读取一个字符(注意:这个实现需要用户逐个输入字符) print(f"请输入第{6-n}个字符: ", end='') char = input()[0] if input() else ' ' # 只取第一个字符,如果没有输入则为空格 # 递归调用:先读取后续字符 read_and_reverse_print(n - 1) # 在递归返回时打印当前字符(实现反向) print(char, end='') # 主程序 def main_interactive(): print("将逐个输入5个字符:") print("反向顺序打印结果: ", end='') # 调用递归函数 read_and_reverse_print(5) print() # 执行程序 if __name__ == "__main__": main_interactive()

结果:
将逐个输入5个字符:
反向顺序打印结果: 请输入第1个字符: r
f
请输入第2个字符: g
r
请输入第3个字符: g
r
请输入第4个字符: d
v
请输入第5个字符: s
v
vvrrf

4. 使用递归构建反向字符串
def build_reverse_string(index, chars): """ 递归构建反向字符串 参数: index: 当前字符的索引 chars: 字符列表 返回: 从当前索引到末尾的反向字符串 """ # 基本情况:当索引超出范围时,返回空字符串 if index >= len(chars): return "" # 递归调用:先获取后面字符的反向字符串 reverse_rest = build_reverse_string(index + 1, chars) # 将当前字符添加到反向字符串的末尾 # 注意:因为递归是先获取后面的结果,所以当前字符要加在结果的最后 # 但由于我们是在递归返回后添加,实际上当前字符会加在前面 return reverse_rest + chars[index] # 主程序 def main_build_string(): print("请输入5个字符: ", end='') user_input = input() # 处理输入,确保正好5个字符 if len(user_input) < 5: user_input = user_input.ljust(5) elif len(user_input) > 5: user_input = user_input[:5] # 转换为字符列表 chars = list(user_input) # 调用递归函数构建反向字符串 reversed_string = build_reverse_string(0, chars) print(f"反向顺序打印结果: {reversed_string}") # 执行程序 if __name__ == "__main__": main_build_string()

结果:

请输入5个字符: jiknh
反向顺序打印结果: hnkij

递归原理的通俗解释:

假设用户输入 "hello",递归过程如下: 方法1的递归调用栈: 1. reverse_print(0, "hello") → 调用 reverse_print(1, "hello") 2. reverse_print(1, "hello") → 调用 reverse_print(2, "hello") 3. reverse_print(2, "hello") → 调用 reverse_print(3, "hello") 4. reverse_print(3, "hello") → 调用 reverse_print(4, "hello") 5. reverse_print(4, "hello") → 调用 reverse_print(5, "hello") 6. reverse_print(5, "hello") # 满足停止条件,开始返回 返回过程: 6. 返回到第5层,打印 chars[4] = 'o' 5. 返回到第4层,打印 chars[3] = 'l' 4. 返回到第3层,打印 chars[2] = 'l' 3. 返回到第2层,打印 chars[1] = 'e' 2. 返回到第1层,打印 chars[0] = 'h' 最终打印出 "olleh"
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 9:22:32

【课程设计/毕业设计】机器学习基于深度学习python的鞋面缺陷识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/6/10 9:22:00

深度学习计算机毕设之卷神经网络基于深度学习python的鞋面缺陷识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/6/10 9:22:31

深度求索(DeepSeek)2026开年新作:mHC 是什么?

DeepSeek 最新发布的论文《mHC: Manifold-Constrained Hyper-Connections》(流形约束超连接)并非直接聚焦于传统意义上的“语音降噪”或“文本去噪”,而是针对大模型训练过程中的信号干扰与不稳定问题提出了一种全新的架构级解决方案,本质上是一种训练信号层面的“降噪”机…

作者头像 李华
网站建设 2026/6/10 13:33:53

1小时打造你的网盘搜索工具原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 快速开发一个网盘搜索工具的最小可行产品(MVP)&#xff0c;包含核心功能&#xff1a;1. 关键词搜索接口&#xff1b;2. 基础结果展示&#xff1b;3. 简单过滤选项&#xff1b;4. 模…

作者头像 李华
网站建设 2026/6/10 11:44:23

5分钟快速搭建MySQL5.7测试环境:开发者的捷径

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 生成一个基于Docker的MySQL5.7快速启动工具包。包含&#xff1a;1. 带常用插件预装的Dockerfile 2. 一键启停脚本 3. 示例数据库导入功能 4. 端口冲突自动检测 5. 内存占用优化配置…

作者头像 李华