c++ 字符串拼接_字符串游戏之拼接字符串

 出场人物介绍

小美:小学4年级学生,参加了学校的编程兴趣小组,已经了解了Python语言的基本语法,能够看懂一些简单的程序。她做事风风火火,对所有的事物都很好奇,喜欢打破砂锅问到底,是一个叫人又爱又恨的小丫头。 阿福:一个酷爱编程的8年级男生。大家都说他长得像国宝大熊猫,动作缓慢,憨态可掬。他做事情确实够慢的,连说话也慢条斯理,可是他一点也不担心,他常常说:“慢就是快,只要坚持下去,蜗牛也能爬上金字塔。”

古老师:虽然年近不惑,但依然对生活充满热情。“爱生活爱运动”是他的人生信条,和孩子们一起编程是他最大的乐趣。他神出鬼没,总是在孩子们最需要帮助的时候出现。当然,你也不能动不动就找古老师,因为他很忙,非常非常忙。所以,遇到问题还是先自己思考吧。

“Python算法之旅”微信群等着你 e0851b6c28be927bca25587101fe2331.png 7160e04891eee1079bce2af7c4cff839.png d408cc8b4aafada415032482270a8941.png 3de447232a2aea65cb9b619c6b31d218.png

扫码加入“Python算法之旅”微信群,和斌哥面对面交流,更多资料和更有趣的话题等你一起来分享。

 正文

字符串游戏之拼接字符串

小美:阿福,最近老师教了我们一种很实用的 Python 数据结构——字符串,他说 Python 的字符串操作比其他编程语言都要简明自然呢。 阿福:是啊, Python 语言的最大特征就是简明易懂,代码和自然语言接近,容易理解。 小美:老师给我们举了一个用字符串画五角星方阵的例子,我觉得很好玩,代码也很简洁呢。 阿福:是吗,那发给我瞧瞧吧。  问题1 五角星方阵。 函数功能:生成大小为 n 的五角星方阵,其中 n 为奇数。 函数名: sort_1(a:str)->str 参数表: n -- 五角星方阵的大小。 返回值:直接输出方阵,没有返回值。 示例 1 :输入 n=3 时,生成五角星方阵: ☆★☆ ★★★ ☆★☆ 示例 2 :输入 n=5 时,生成五角星方阵: ☆☆★☆☆ ☆★★★☆ ★★★★★ ☆★★★☆ ☆☆★☆☆   代码1
def draw_stars(n:int)->None:    s = []    for i in range(1, n+1):        b = 2 * i - 1 if i <= n // 2 else 2 *(n - i) + 1 #黑色五角星数量        w = (n - b) // 2 #白色五角星数量        s.append("☆" * w + "★" * b + "☆" * w)    for i in s:        print(i)
    阿福:确实是一个很棒的例子,利用 Python 字符串的 ”+” 和 ”*” 运算符,只需一重循环就完成了方阵的输出。这在其他编程语言中是很难办到的,充分体现了 Python 简洁明了的特性。   知识小贴士

Python字符串运算符简介:

操作符”+”,用作字符串连接,例如a=”1”,b=”2”,则a+b的结果为”12”。

操作符”*”,用作重复输出字符串,例如a=”1”,则a*3的结果为”111”。

顺序拼接字符串,例如a=”1”,b=”2”,则执行a=a+b后,a=”12”。

逆序拼接字符串,例如a=”1”,b=”2”,则执行a=b+a后,a=”21”。

古老师:一段时间不见,大家长进都不小!已经对字符串有了比较深刻的认识了。今天我就来考查一下,看看你们对字符串拼接操作的熟练度如何。 小美:好啊,在家憋了好长一段时间了,正想释放一下大脑的压力呢。   题目2 字符串拼接练习 1 。     将一个存储了非递减序列的字符串 a 中的字符转存到字符串 b 中,使得字符串 b 的字符呈现中间小,并逐次向两边增大的特征。 函数功能:将存储了非递减序列的字符串 a 中的字符转存到字符串 b 中,使得字符串 b 的字符呈现中间小,并逐次向两边增大的特征。 函数 名:sort_1(a:str)->str 参数表:a -- 存储了非递减序列的字符串a。 返回值:转换后的字符串b。 示例1:当a="12345678"时,b="75312468"。 示例2: 当a="123456789"时,b="975312468"。     小美:这道题目比五角星方阵要难呢,需要先找到字符串b 拼接的规律。     阿福:是的,我注意到字符串b 拼接的规律是左- 右- 左- 右交替进行的。     小美:没错,我也看到了。我还画了一幅示意图,你看对不对。 81d0b0980a194e848d2b3df2a879ccd6.png     阿福:真棒!正是这样。有了示意图,代码就好写多了。  代码2
def sort_1(a:str)->str:        b = ""    for i, c in enumerate(a):        if i % 2 == 0:            b = c + b        else:            b = b + creturn b
    古老师:不错不错!看来你已经领会到字符串拼接操作的精髓了。不知道你们注意到没有,我刚才给自定义函数取名为 sort_1 。其实它还有一道姊妹题,一并发给你们吧。慢慢思考,我有事先走了。   题目3 字符串拼接练习 2 。     将一个存储了非递减序列的字符串 a 中的字符转存到字符串 b 中,使得字符串 b 的字符呈现中间小,并逐次向两边增大的特征。 函数功能:将存储了非递减序列的字符串 a 中的字符转存到字符串 b 中,使得字符串 b 的字符呈现中间小,并逐次向两边增大的特征。 函数名: sort_2(a:str)->str 参数表: a -- 存储了非递减序列的字符串 a 。 返回值:转换后的字符串 b 。 示例 1 :当 a="12345678" 时, b="75312468" 。 示例 2 :当 a="123456789" 时, b="864213579" 。 温馨提示: 有事没事最好拉到文末看看,说不定作者今天提供了彩蛋哦!
说在后面

Python算法之旅系列文章源于我平时收集和整理的一些题目,我尝试用自己的语言把这些题目进行了再创作。由于本人水平有限,表述中难免出现疏漏甚至错误之处,敬请谅解。

无论是赞同还是反对我的看法,都请你给我留言。如果你有新的想法,千万不要憋在心里,请发出来大家一起讨论。让我们相互学习,共同进步!

需要本文word版的,可以加入“Python算法之旅”知识星球参与讨论和下载文件,“Python算法之旅”知识星球汇集了数量众多的同好,更多有趣的话题在这里讨论,更多有用的资料在这里分享。

我们专注Python算法,感兴趣就一起来!

566240c688ddc0292ca613691274ef07.png

 彩蛋

小美:什么姊妹题啊?看上去一模一样啊。 阿福:字符串a 的长度为偶数时,二者确实一模一样,但长度为奇数时,二者还是有区别的。

小美:哦,原来是这样。我看出来了!它的规律是这样的:

661ce9d853d1a0b41e2477ecf86b1fef.png 阿福:小美不错啊,这么快就发现规律了!那代码怎么写呢? 小美:这个很简单,只需要先判断一下字符串的长度是否为奇数,如果是奇数需要把a[0]放在最中间,然后按照左-右,左-右的顺序依次拼接字符串就行了。

代码3

def sort_2(a:str)->str:    b, begin = "", 0    if len(a) % 2 == 1:        b, begin = a[0], 1    for i in range(begin, len(a), 2):        b = a[i] + b + a[i+1]return b

阿福:这个方法确实不错,但是没必要从中间开始拼接字符串。我发现无论字符串的长度如何,新字符串总是把最大值放在右端,次大值放在左端,然后依次向中间缩进。规律如图所示:

b4f1f16d1e40f6ad25a4f6b99415193f.png

小美:还真是这样呢,阿福你的观察力可以啊!那就请把代码也一起写出来吧。

阿福:没问题,只要设置两个变量bL和bR,分别存储左右两侧的字符,然后拼接起来就行了。循环结构可以模仿sort_1函数的做法。

 代码4

def sort_2(a:str)->str:    bL, bR = "", ""    for i, c in enumerate(a[::-1]):        if i % 2 == 0:            bR = c + bR        else:            bL = bL + c    return bL + bR

相关优秀文章:

阅读代码和写更好的代码

最有效的学习方式

字符串游戏之身份证号的秘密

字符串游戏之无效的身份证

字符串游戏之9路棋盘

列表的纷争之双指针扫描

列表的纷争之回文数列

   字典的狂舞之石头剪刀布

b2d1651564d2d3f863bc4f6d23d26aaa.png

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值