news 2026/6/11 7:10:08

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 13:12:12

环境仿真软件:MIKE 21_(15).MIKE21与其他软件的集成

MIKE21与其他软件的集成 1. MIKE21与Python的集成 Python 是一种广泛使用的编程语言&#xff0c;具有强大的数据处理和科学计算能力。MIKE21 提供了与 Python 的集成接口&#xff0c;使得用户可以利用 Python 的强大功能来处理和分析 MIKE21 模拟结果&#xff0c;以及定制化地…

作者头像 李华
网站建设 2026/5/30 1:30:47

【课程设计/毕业设计】基于卷神经网络识别草莓和其他

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

作者头像 李华
网站建设 2026/6/10 15:16:46

效率对比:传统vsTDAPPDESKTOP开发桌面应用

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建对比测试项目&#xff1a;1. 传统手动开发的Markdown编辑器桌面应用 2. 使用TDAPPDESKTOP生成的同类应用。要求包含&#xff1a;实时预览、主题切换、导出PDF功能。生成两份完…

作者头像 李华
网站建设 2026/5/30 22:05:16

毕业设计:python手写数字识别系统 CNN算法 卷积神经网络 OpenCV和Keras模型 计算机视觉 毕业设计(建议收藏)✅

博主介绍&#xff1a;✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久&#xff0c;选择我们就是选择放心、选择安心毕业✌ > &#x1f345;想要获取完整文章或者源码&#xff0c;或者代做&#xff0c;拉到文章底部即可与…

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

如何用AI自动解决‘Automated Query‘错误提示

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个AI工具&#xff0c;能够自动检测网络请求是否被识别为自动化查询。功能包括&#xff1a;1. 分析HTTP请求头和行为模式&#xff1b;2. 自动调整请求频率和模式以避免触发防…

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

AI助力Element Plus开发:自动生成UI组件代码

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 使用快马平台的AI代码生成功能&#xff0c;基于Element Plus框架开发一个后台管理系统的基础UI组件。要求包含&#xff1a;1. 完整的用户管理表格组件&#xff0c;支持分页、筛选和…

作者头像 李华