ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

第15期-反转字符串

2022-01-06 17:01:24  阅读:149  来源: 互联网

标签:15 变量 反转 reduce 返回值 字符串 input 赋值


1 问题描述

请用户输入一个字符串,将其进行反转,输出反转后的字符串
如将字符串'abcde', 反转为'edcba'

2 解题思路

字符串是有序的排列,反转字符串可用for循环、反向切片、反转列表、递归、reduce函数等方法

3 解题方法

方法一:for循环

a = input("请输入字符串:")
b = ''
for i in a:
    b = i + b
print(b)
View Code

第1行: 用input函数获取用户输入的字符串,赋值给变量 a
第2行: 创建变量b,赋值为一个空字符串
第3行: 由于字符串是有序的排列,用for循环遍历a中的每一个元素
第4行: 每次循环都将循环变量 i 与变量 b 连接起来,再赋值给变量b,循环结束时,b 为 a 的反向字符串
第5行: 输出变量 b

以字符串'yth'为例
第一次循环,i = 'y', b = 'y'
第二次循环,i = 't', b = 't' + 'y' => 'ty'
第三次循环,i = 'h', b = 'h' + 'ty' =>'hty'

方法二:反向切片

a = input("请输入字符串:")
b = a[::-1]
print(b)

第1行: 用input函数获取用户输入的字符串,赋值给变量a
第2行: 创建变量b,将用户输入的字符串转化为字符串列表
第3行: reverse() 方法反转元素的排序顺序,用reverse()方法对列表b进行反转
第4行: 用字符串的join()方法遍历列表,合并成一个字符串
第5行: 输出变量c

方法四:递归

a = input("请输入字符串:")
def f(x):
    if len(x) <= 1:
        return x
    return f(x[1:]) + x[0]

print(f(a))
View Code

第1行: 用input函数获取用户输入的字符串,赋值给变量a
第2行: 定义函数 f,传入参数x
第3-4行: 设定递归算法的结束条件,即当参数 x 的长度 小于或等于 1 时,返回值为 x
第5行: 否则返回值为f(x[1:]) + x[0]
第7行: 为参数 x 赋值为 a, 并输出f(a)的结果

以字符串 'abcde' 为例
对于f('abcde'), 返回值为f('bcde') + 'a'
对于f('bcde'), 返回值为f('cde') + 'b'
对于f('cde'), 返回值为f('de') + 'c'
对于f('d'), 返回值为f('e') + 'd'
对于f('e'), 返回值为 'e' (因为len(e) = 1)
所以:
f('de')为'e' + 'd' => 'ed'
f('cde')为'ed' + 'c' => 'edc'
f('bcde')为'edc' + 'b' =>'edcb'
f('abcde')为'edcb' + 'a' =>'edcba'

方法五:reduce函数

from functools import reduce
a = input("请输入字符串:")
b = reduce(lambda x, y: y + x, a)
print(b)

第1行: 从functools模块中导入reduce()函数
第2行: 用input函数获取用户输入的字符串,赋值给变量a
第3行: 调用reduce函数,使用lambda表达式输出反转字符串,并赋值给变量b
第4行: 输出变量b

以字符串 'abcde' 为例
x = 'a' y = 'b'; y + x => 'b' + 'a' => 'ba'
x = 'ba' y = 'c'; y + x => 'c' + 'ba' => 'cba'
x = 'cba' y = 'd'; y + x => 'd' + 'cba' => 'dcba'
x = 'dcba' y = 'e'; y + x => 'e' + 'dcba' => 'edcba'

第11期-计算阶乘 (opens new window)中有详细讲解reduce函数和lambda表达式,大家可以查看哦~

 

标签:15,变量,反转,reduce,返回值,字符串,input,赋值
来源: https://www.cnblogs.com/lg03/p/15771870.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有