news 2026/4/15 16:56:38

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/4/9 16:44:44

环境仿真软件:MIKE 21_(16).环境管理与法规

环境管理与法规 在环境仿真软件的二次开发过程中&#xff0c;环境管理与法规是一个重要的领域。这一节将详细介绍如何在MIKE 21中实现环境管理与法规的仿真&#xff0c;包括如何处理环境数据、如何设置法规约束条件&#xff0c;以及如何验证模型的合规性。我们将通过具体的例子…

作者头像 李华
网站建设 2026/4/15 13:28:30

环境仿真软件:MIKE 21_(19).软件更新与版本管理

软件更新与版本管理 在环境仿真软件的二次开发中&#xff0c;软件更新与版本管理是至关重要的环节。这不仅关系到软件的稳定性和功能性&#xff0c;还影响到团队协作的效率和项目的可维护性。本节将详细介绍如何在二次开发过程中有效地进行软件更新与版本管理&#xff0c;包括版…

作者头像 李华
网站建设 2026/4/14 18:17:40

计算机深度学习毕设实战-基于python深度学习识别草莓和其他人工智能

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

作者头像 李华
网站建设 2026/4/15 15:04:40

如何用阿里DNS优化AI应用的网络性能

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个Python脚本&#xff0c;使用阿里DNS的API实现智能域名解析功能&#xff0c;自动选择最优的服务器节点。要求包含以下功能&#xff1a;1. 调用阿里DNS API进行域名解析&…

作者头像 李华
网站建设 2026/4/15 15:06:08

5分钟搭建本地Docker镜像缓存服务

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个快速搭建本地Docker镜像缓存的脚本工具&#xff0c;能够&#xff1a;1. 一键部署本地registry镜像&#xff1b;2. 配置自动缓存常用镜像&#xff1b;3. 提供简单的Web管理…

作者头像 李华