出场人物介绍

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

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

“Python算法之旅”微信群等着你

扫码加入“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拼接的规律是左-右-左-右交替进行的。小美:没错,我也看到了。我还画了一幅示意图,你看对不对。阿福:真棒!正是这样。有了示意图,代码就好写多了。 代码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算法,感兴趣就一起来!

彩蛋

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

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

阿福:小美不错啊,这么快就发现规律了!那代码怎么写呢?小美:这个很简单,只需要先判断一下字符串的长度是否为奇数,如果是奇数需要把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

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

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

阿福:没问题,只要设置两个变量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路棋盘

列表的纷争之双指针扫描

列表的纷争之回文数列

字典的狂舞之石头剪刀布

python 路径拼接字符串_字符串游戏之拼接字符串相关推荐

  1. bootstrap table格式化字符串_你要的PHP字符串处理函数都在这了!

    php中文网最新课程 每日17点准时技术干货分享 打印输出函数 说明 echo 输出一个或多个字符串 print 输出字符串 printf 输出格式化字符串 sprintf Return a form ...

  2. java 补齐字符串_使用String.format()格式化字符串,java自动补全自增长字符串

    JDK1.5中,String类新增了一个很有用的静态方法String.format(): format(Locale l, String format, Object... args) 使用指定的语言 ...

  3. python路径怎么查_如何查看python路径

    python是解释型脚本语言,在执行时,逐句解释执行,不需要进行预编译.但需要有自身的Python解释器. 所以在执行Python代码时,需要指定python解释器. 指定解释器方法: 在文件开头添加 ...

  4. python输出数字和字符串_(一)1-5Python数字和字符串

    作业 一.数字数据类型用于存储数值.它们是不可变数据类型. a = 3.0 b = 2.5 c = 2.4 Python支持不同的数值类型 1.init(有符号整数) - 它们通常被称为整数或整数.它 ...

  5. python正则表达式取中间字符串_正则表达式如何获取中间字符串

    如果问题真的是"这个表达有什么问题?",答案如下:您试图将换行符与.*?匹配.您需要(?s)才能使其工作.在 在正则表达式的中间有显式的空格和换行符,它们在源文本中没有任何对应的字 ...

  6. python编写函数、给定任意字符串_编写函数,给定任意字符串,找出其中只出现一次的字符,如果有多个这样的字符,就全部找出。...

    [简答题]编写程序,实现分段函数计算,如下表所示. x y x<0 0 0<=x<5 x 5<=x<10 3x-5 10<=x<20 0.5x-2 20< ...

  7. python正则表达式排除字符_利用正则表达式排除特定字符串

    查找不以baidu开头的字符串 baidu.com sina.com.cn 正则:^(?!baidu).*$  匹配结果就是第2行,也就是第1行被排除了 这里使用了零宽度断言(?!exp),注意,我们 ...

  8. python int转化为字符串_将列表项从字符串转换为int(Python)

    参见英文答案 > Convert all strings in a list to int 2个 我有一个清单: Student_Grades = ['56', '49', '63'] 我想将每 ...

  9. js 包含某个字符串_[译] 5 大 JavaScript 字符串操作库

    原文地址:5 String Manipulation Libraries for JavaScript 原文作者:Mahdhi Rezvi 译文出自:掘金翻译计划 本文永久链接:https://git ...

  10. python路径规划仿真_路径规划之dijkstra

    原理 dijkstra也是一种基于图的搜索算法,算法原理也很简单:按照代价排序每次弹出一个代价最小的结点,同样也是一个优先级队列,不过需要注意与Greedy Best First Search的区别( ...

最新文章

  1. 聚类效果评估、内部指标(Jaccard系数、FM指数、Rand指数)、外部指标(DB指数、Dunn指数)、轮廓系数(Silhouette Coefficient)
  2. linux 切换python版本_Linux下python默认版本切换成替代版本(示例代码)
  3. java socket 重连复用,20190818 On Java8 第八章 复用
  4. Android序列化的存储和读取
  5. MapReduce读取本地文件,而不是HDSF上的文件
  6. SAP Spartacus ProductOccModule
  7. vue2实践揭秘pdf_《Vue2实践揭秘》源码
  8. Linux设置ssh免密码登录
  9. 华为云提供多场景本地数据上云方案,数据上云不再愁
  10. 01数据结构——绪论
  11. Asp.Net MVC部暑托管服务器iis7提示403错误解决方法
  12. win10简洁之道(有效去广告)
  13. 蚂蚁区块链第1课 蚂蚁10大区块链解决方案及应用场景
  14. BNUOJ-4049-四叉树
  15. 大数据平台监控告警系统的实现
  16. 黑灰产眼中的NFT:平台嗷嗷待宰,用户送钱上门
  17. 【通識:人生哲學與幸福】老子人生觀巡禮
  18. 企业微信后台应用配置步骤
  19. Vue从零开始(2):使用Vue CLI快速生成项目脚手架
  20. 身份证OCR识别在远程开户中的应用

热门文章

  1. mysql的安装与卸载
  2. Python(42)_文件操作
  3. jQuery 插件 autocomplete 的使用
  4. L2-008. 最长对称子串
  5. 看见的力量 – (II) 影响地图
  6. lnmp安装完之后的一些注意事项
  7. ASP.net Ajax 调用Web Service
  8. Visual C# 2008+SQL Server 2005 数据库与网络开发-- 1.1 Visual Studio 2008概述
  9. celerra(八)--Celerra Replication(下)
  10. CVPR 2017精彩论文解读:综合使用多形态核磁共振数据的3D生物医学图像分割方法 | 分享总结...