python字符串的进阶

在上一篇文章的 密码破解器 中,我们回顾了循环专题的知识点。

while 循环和 for 循环是 Python 中的两大循环语句,它们都可以实现循环的功能,但在具体使用时略有差别。当循环次数不确定时,我们选用 while 循环;当循环次数确定,需要遍历整个序列的元素时,for 循环则更为合适。

此外,for 循环和 zip() 函数、enumerate() 函数搭配使用能更加灵活的操作序列中的元素。

如果有所遗忘,推荐你回到上节课再加强理解哦。

从本关开始,我们将攻克一个新目标——字符串。各位 Python 练习生们,你们准备好了吗?🎙️

字符串

在 Python 的世界里,字符串是表示文本的数据类型,我们再来回顾一下如何将字符串赋值给变量:

name1 = '小贝'
name2 = "小贝"

Python 中的字符串是使用一对英文单引号(')或英文双引号(")包裹的任意文本。无论是用单引号还是用双引号,它俩的效果都是一样的,但需要保持前后引号的统一。

在之前的课程练习中,我们打印的文字好像都只能在一行,如果我们要打印多行文字时,比如打印一首诗,要怎么办呢?你可能会像下面这样编写代码,然后发现报错了。

poetry = '日暮苍山远,天寒白屋贫。
柴门闻犬吠,风雪夜归人。'
print(poetry)
# 报错:SyntaxError: bad token on line 1

系统在读取第一行代码时,只识别到一个单引号,而无法读取后续的字符串,导致了语法错误。为了避免这个问题,你也可能像下面这样机智地使用多个 print() 函数。

poetry1 = '日暮苍山远,天寒白屋贫。'
poetry2 = '柴门闻犬吠,风雪夜归人。'
print(poetry1)
print(poetry2)
# 输出:
# 日暮苍山远,天寒白屋贫。
# 柴门闻犬吠,风雪夜归人。

问题是解决了,但如果要输出一首莎士比亚的十四行诗《我怎么能够把你来比作夏天》,岂不是要编写 28 行代码,想想就觉得很麻烦。那有没有什么好的办法呢?这个时候,就要用到强大的三引号了。

我们可以像下面这样使用一对三引号(''' 或 """)来包裹多行字符串。三引号包裹的字符串和普通的字符串使用上没有区别,只是三引号支持多行字符串而已。

poetry = '''我怎么能够把你来比作夏天?
你不独比它可爱也比它温婉:
狂风把五月宠爱的嫩蕊作践,
夏天出赁的期限又未免太短:
天上的眼睛有时照得太酷烈,
它那炳耀的金颜又常遭掩蔽:
被机缘或无常的天道所摧折,
没有芳艳不终于凋残或消毁。
但是你的长夏永远不会凋落,
也不会损失你这皎洁的红芳,
或死神夸口你在他影里漂泊,
当你在不朽的诗里与时同长。
只要一天有人类,或人有眼睛,
这诗将长存,并且赐给你生命。'''
print(poetry)
# 输出:
# 我怎么能够把你来比作夏天?
# 你不独比它可爱也比它温婉:
# 狂风把五月宠爱的嫩蕊作践,
# 夏天出赁的期限又未免太短:
# 天上的眼睛有时照得太酷烈,
# 它那炳耀的金颜又常遭掩蔽:
# 被机缘或无常的天道所摧折,
# 没有芳艳不终于凋残或消毁。
# 但是你的长夏永远不会凋落,
# 也不会损失你这皎洁的红芳,
# 或死神夸口你在他影里漂泊,
# 当你在不朽的诗里与时同长。
# 只要一天有人类,或人有眼睛,
# 这诗将长存,并且赐给你生命。

除了使用多行字符串来实现多行文本外,使用 \n 也能达到一样的效果。\n 被称为 换行符,用于文本间的换行。

插入了换行符,其后方的内容将另起一行显示,所以,输出《风雪夜归人》的诗行可以这样实现:

poetry = '日暮苍山远,天寒白屋贫。\n柴门闻犬吠,风雪夜归人。'
print(poetry)
# 输出:
# 日暮苍山远,天寒白屋贫。
# 柴门闻犬吠,风雪夜归人。

拼接字符串

我们都知道通过 + 可以将两个字符串拼接,得到一个新的字符串。

first_name = '史蒂夫'
last_name = '乔布斯'
# 使用 + 拼接字符串
full_name = first_name + '·' + last_name
print(full_name)
# 输出:史蒂夫·乔布斯

当我们把同一个字符串重复很多次的时候,我们可以使用多个 + 拼接,像下面这样:

str1 = '海草'
str2 = str1 + str1 + str1
print(str2)
# 输出:海草海草海草

上面那样的写法太麻烦了,你有没有想到更快捷的方法?

对了,用 *!数学中的乘法是相同的数加起来的快捷方式,Python 中字符串的拼接操作也是如此。

str1 = '海草'
str2 = str1 * 3  # 相当于 str1 + str1 + str1
print(str2)
# 输出:海草海草海草

编程练习

你小时候肯定听过这么一个童谣:“从前有座山,山里有个庙。庙里有老和尚和小和尚,有一天老和尚对小和尚说:从前有座山,山里有个庙。庙里有老和尚和小和尚,有一天老和尚对小和尚说:从前有座山,山里有个庙。庙里有老和尚和小和尚,有一天老和尚对小和尚说:……”。

我们接下来用字符串拼接的方法,将这个一直循环的童谣讲 20 遍!

最优解:

story = '从前有座山,山里有个庙,庙里有老和尚和小和尚,有一天老和尚对小和尚说:'
print(story * 20)
# 将 story 重复 20 遍拼接在一起使用 print() 输出

运用字符串拼接的方式完成一组重复文本的输出,既省时又省心。

其实 Python 还提供了一种更高级的方法来组合字符串,那就是字符串格式化输出。

字符串格式化输出

字符串格式化输出 是按照一种既定格式给字符串填空的方式,以便我们更加方便地写入字符串。比如一段自我介绍的文本:我叫 xx,今年 xx 岁,来自 xx。,根据我们学过的知识,我们会这样写:

def print_intro(name, age, city):intro = '我叫' + name + ',今年 ' + str(age) + ' 岁,来自' + city + '。'print(intro)print_intro('小贝', 18, '南京')
# 输出:我叫小贝,今年 18 岁,来自南京。

提示:字符串类型和数字类型不能直接相加,需要用 str() 函数进行类型转换。

上面的例子里,我们用了一堆 + 来拼接字符串,既麻烦又难以一眼看出来是什么。接下来老师用字符串的格式化输出实现同样的功能:

def print_intro(name, age, city):intro = '我叫%s,今年 %d 岁,来自%s。' % (name, age, city)print(intro)print_intro('小贝', 18, '南京')
# 输出:我叫小贝,今年 18 岁,来自南京。

小贝提问,这段代码看起来有点复杂,“%”在这里是什么意思,老师能不能再详细地说一说?

好的,我们来看一下字符串格式化输出的语法规则:

% 运算符左边是要格式化的字符串,右边是一个元组。如果只有一个占位符,可以将元组里的元素拿出来,如:'我叫%s' % '小贝'

我们通过 %s%d 这样的占位符在字符串中“占位”,Python 会将 % 右边的内容会按顺序替换掉对应的占位符,一一填空。每个占位符都有特定的含义,我们来看一下常见的占位符:

提示:如果你不太确定应该用什么占位符,%s 是万能的,它会把任何数据类型转换为字符串。

编程练习

小贝写了段播报天气的代码,但还是用 + 进行字符串拼接实现的,你能用字符串格式化输出的知识帮她改进一下代码吗?

weathers = [('南京', 36),('成都', 30),('昆明', 26)
]for w in weathers:print('今天' + w[0] + '的最高气温是' + str(w[1]) + '度')

解答后为:

weathers = [('南京', 36),('成都', 30),('昆明', 26)
]for w in weathers:
# 如果你不太确定应该用什么占位符,%s 是万能的,它会把任何数据类型转换为字符串。print('今天%s的最高气温是%s度'%(w[0],w[1]))# 今天南京的最高气温是36度
# 今天成都的最高气温是30度
# 今天昆明的最高气温是26度

编程练习—练习生

身为 Python 练习生的你,练习时长有多久了呢?今天我们来用字符串格式化的知识来做段自我介绍!

格式是:同学们大家好,我是 Python 练习时长 xxx 的个人练习生 xxx,喜欢 xxx!。比如:同学们大家好,我是 Python 练习时长两年半的个人练习生小贝,喜欢唱、跳、Python、篮球!

将下面的代码,用刚刚学的占位符的方式去展示

def print_intro(duration, name, hobby):# 用占位符修改下面字符串print('大家好,我是 Python 练习时长两年半的个人练习生小贝,喜欢唱、跳、Python、篮球!')# 将参数改为你的自我介绍
print_intro('两年半', '小贝', '唱、跳、Python、篮球')

优化后的代码为:

def print_intro(duration, name, hobby):# 用占位符修改下面字符串print('大家好,我是 Python 练习时长%s的个人练习生%s,喜欢%s!'%(duration, name, hobby))# 将参数改为你的自我介绍
print_intro('两年半', '小贝', '唱、跳、Python、篮球')

编程练习—人类的本质是复读机

在各大 APP 的评论区里,一旦某个人的发言有意思,其他人就会“保持队型”,纷纷模仿他说的话。

比如随处可见的“+1”和“+10086”,视频 UP 主求赞之后弹幕上总会飘过一大片“下次一定”,人类的本质果然是复读机呢。

列表 words 中储存了一些常见的网络用语,我们可以用字符串方法将列表里的元素都“复读”三次,比如将 ['+1', '就这'] 复读为 ['+1+1+1', '就这就这就这']

要求复读后不改变列表元素的顺序,请你在原列表中,将每个元素都复读三次,并将复读后的列表打印出来。

words = ['+1', '不会吧', '下次一定', '+10086', '就这']

解题后:

words = ['+1', '不会吧', '下次一定', '+10086', '就这']
# 方法一
items = []
for word in words:items.append('%s'%(word * 3))
print(items)# 方法二
# for i in range(len(words)):
#   words[i] *= 3
# print(words)

编程练习——句子扭蛋

学完一关啦,想不想轻松一下?这就给你介绍一个好玩的游戏:句子扭蛋。

首先邀请你的小伙伴一起,大开脑洞随便写下三组词,分别包括人物、地点和事件三类词,比如:

人物:哆啦A梦,迪迦奥特曼,路飞,苏大强,容嬷嬷,甄嬛,谢耳朵

地点:埃菲尔铁塔上,地铁上,大街上,飞机上,三里屯,家里,浴室里,王者峡谷

事件:背课文,高唱《死了都要爱》,蹦极,补暑假作业,跳远,开黑,800米跑,看《生活大爆炸》

然后,在三组词里随机抽签,用上面这些词来“造句”,比如“容嬷嬷在王者峡谷看《生活大爆炸》。”

是不是觉得还蛮有趣的?Python 可以很方便地做一个这样的游戏,我们把人物、地点和事件分别存到列表 rolesspots 和 events 里,再用 random() 函数随机生成列表的索引值,在列表中随机选取元素并拼成句子。

生成 roles 列表随机索引值 i_role 的代码已经写好,请你仿照这个例子,生成其他列表的索引值,并用字符串格式化的方法,把随机取到的列表元素拼成句子。

提示:老师给的例子不够有趣?你可以修改列表里已经写好的词,DIY 你自己的句子扭蛋哦!

# 有下面这行代码,random() 方法才会奇效,注意不要删掉它~
import randomroles = ['哆啦A梦', '迪迦奥特曼', '路飞', '苏大强', '容嬷嬷', '甄嬛', '谢耳朵']
spots = ['埃菲尔铁塔上', '地铁上', '大街上', '飞机上', '三里屯', '家里', '浴室里', '王者峡谷']
events = ['背课文', '高唱《死了都要爱》', '蹦极', '补暑假作业', '跳远', '开黑', '800米跑', '看《生活大爆炸》']# 请仿照下面这行代码,生成列表 spots 和 events 的随机索引值
i_role = random.randint(0, len(roles) - 1)# 下面是老师写好的句子模板,请你用字符串格式化的方法向其中填入内容。
# 当然,你也可以 DIY 输出句子的格式哦!
print('我看到了一件怪事:【人物】在【地点】【做某件事】。')

解答后:

# 有下面这行代码,random() 方法才会奇效,注意不要删掉它~
import randomroles = ['哆啦A梦', '迪迦奥特曼', '路飞', '苏大强', '容嬷嬷', '甄嬛', '谢耳朵']
spots = ['埃菲尔铁塔上', '地铁上', '大街上', '飞机上', '三里屯', '家里', '浴室里', '王者峡谷']
events = ['背课文', '高唱《死了都要爱》', '蹦极', '补暑假作业', '跳远', '开黑', '800米跑', '看《生活大爆炸》']# 请仿照下面这行代码,生成列表 spots 和 events 的随机索引值
i_role = random.randint(0, len(roles) - 1)
i_spot = random.randint(0, len(roles) - 1)
i_event = random.randint(0, len(roles) - 1)# 下面是老师写好的句子模板,请你用字符串格式化的方法向其中填入内容。
# 当然,你也可以 DIY 输出句子的格式哦!
print('我看到了一件怪事:%s在%s%s。' %(roles[i_role],spots[i_spot],events[i_event]))# 我看到了一件怪事:甄嬛在三里屯蹦极。
# 我看到了一件怪事:甄嬛在埃菲尔铁塔上800米跑。
# 我看到了一件怪事:迪迦奥特曼在大街上高唱《死了都要爱》。
# 我看到了一件怪事:容嬷嬷在家里跳远。
......

是不是很有意思呢~~

预告:下一篇:字符串的索引

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/22751.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【限免】杂波环境下线性调频脉冲、巴克码、频率步进脉冲雷达MTI、脉冲压缩【附MATLAB代码】

文章来源:​微信公众号:EW Frontier/ 智能电磁频谱算法 本代码主要模拟杂波环境(飞机、地杂波、鸟类信号)下,Chirp脉冲、巴克码脉冲、频率步进脉冲雷达信号的脉冲压缩及MTI、匹配滤波。 MATLAB主代码 % 生成雷达信号…

做任务赚钱的app有哪些?(真实可靠能做任务赚钱软件app推荐)

在数字化时代,通过手机APP做任务赚钱已成为一种流行的兼职方式。这些APP为用户提供了完成小任务以赚取现金或奖励的机会。以下是一些真实可靠的做任务赚钱的APP推荐,帮助您在空闲时间增加收入。 赏帮赚是一个正规的兼职接单赚钱平台,在这个平…

MariaDB数据导入与导出操作演示

文章目录 整个数据库导出导入先删除库然后再导入 参考这里: MariaDB数据库导出导入. 整个数据库 该部分演示:导出数据库,然后重建数据库,并导入数据的整个过程。 导出 Win R ,打开运行输入cmd并回车,然…

迅雷极简易下载

一、简介 1、迅雷是一家全球领先的去中心化服务商,以技术构建商业,以服务创造共识,从而建立一个高效可信的存储与传输网络。 迅雷成立于2003年,总部位于中国深圳,2014年于纳斯达克上市(纳斯达克股票代码&a…

OPPO 文件传输 - 将文件从 OPPO 手机传输到 PC 的 5 种方法

OPPO手机以其出色的拍照功能而闻名,尤其是新推出的OPPO Find X2系列,它配备了高清前置镜头和超夜景模式,让您轻松拍出精彩瞬间。当您需要将这些照片或其他文件从OPPO手机传输到PC时,以下是五种简便的方法。 第 1 部分&#xff…

UI设计公司-蓝蓝设计-交通行业ui设计解决方案

来百度APP畅享高清图片 这是北京兰亭妙微科技有限公司(简称蓝蓝设计)在交通行业的一些ui设计经验,我们建立了UI设计分享群,每天会分享国内外的一些优秀设计,如果有兴趣的话,可以进入一起成长学习&#xff0…

电路方案分析(十九)快速响应过流事件检测电路

快速响应过流事件检测电路 1.设计需求2.设计方案3.设计说明4.仿真验证 tips&#xff1a;方案参考来自TI参考设计&#xff0c;仅供学习交流使用。 1.设计需求 2.设计方案 这是一种快速响应单向电流检测解决方案&#xff0c;通常称为过流保护 (OCP)&#xff0c;可提供 < 2μ…

【AI大模型】基于Langchain和Openai借口实现英文翻译中文应用

&#x1f680; 作者 &#xff1a;“大数据小禅” &#x1f680; 文章简介 &#xff1a;本专栏后续将持续更新大模型相关文章&#xff0c;从开发到微调到应用&#xff0c;需要下载好的模型包可私。 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 目…

【python009】Python处理某区域边界经纬度数据至geohash

1.熟悉、梳理、总结项目研发实战中的Python开发日常使用中的问题、知识点等&#xff0c;如Python处理某区域边界经纬度数据至geohash&#xff0c;便于时空交集。 2.欢迎点赞、关注、批评、指正&#xff0c;互三走起来&#xff0c;小手动起来&#xff01; 3.欢迎点赞、关注、批评…

【数据库初阶】SQL--DCL

文章目录 DCL1. 基本介绍2. 用户管理2.1 查询用户2.2 创建用户2.3 修改用户密码2.4 删除用户 3. 权限控制3.1 查询权限3.2 授予权限3.3 撤销权限 4. DCL总结 DCL 更多数据库MySQL系统内容就在以下专栏&#xff1a; 专栏链接&#xff1a;数据库MySQL 1. 基本介绍 DCL英文全称是…

45-3 护网溯源 - 为什么要做溯源工作

官网:CVERC-国家计算机病毒应急处理中心 西工大遭网络攻击再曝细节!13名攻击者身份查明→ (baidu.com) 护网溯源是指通过技术手段追踪网络攻击的来源和行为,其重要性体现在以下几个方面: 安全防御:了解攻击源头可以帮助组织加强网络安全防御,及时采取措施防止攻击的再次…

NXP i.MX8系列平台开发讲解 - 3.14 Linux 之Power Supply子系统(二)

专栏文章目录传送门&#xff1a;返回专栏目录 Hi, 我是你们的老朋友&#xff0c;主要专注于嵌入式软件开发&#xff0c;有兴趣不要忘记点击关注【码思途远】 目录 1. 前言 2. 芯片简介 2. 系统原理设计 2. 设备树相关 本文实操是基于Android11 系统下i.MX8MQ环境下&#x…

代码随想录算法训练营第十三天| 102. 二叉树的层序遍历、226.翻转二叉树、101. 对称二叉树

102. 二叉树的层序遍历 题目链接&#xff1a;102. 二叉树的层序遍历 文档讲解&#xff1a;代码随想录 状态&#xff1a;dfs没写出来&#xff0c;bfs不知道如何分层 import java.util.*;public class BinaryTreeLevelOrderTraversal {// 用于存储每一层的节点值List<List<…

Etcd Raft架构设计和源码剖析2:数据流

Etcd Raft架构设计和源码剖析2&#xff1a;数据流 | Go语言充电站 前言 之前看到一幅描述etcd raft的流程图&#xff0c;感觉非常直观&#xff0c;但和自己看源码的又有些不同&#xff0c;所以自己模仿着画了一下&#xff0c;再介绍一下。 下图从左到右依次分为4个部分&…

Windows 宿主机访问 VirtualBox 虚拟机中创建的 docker 容器中的 mysql8.0 的数据

一、场景需求 在开发环境中&#xff0c;一般使用 windows 系统进行开发&#xff0c;但需要在 linux 系统中创建运行 mysql8.0 的 docker 容器中进行测试&#xff08;win10特定版本或win11才能安装 docker&#xff09;&#xff0c;为了方便还需要在 windows 系统中通过 SQLyog …

植物大战僵尸杂交版2.0.88最新版+防闪退工具V2+修改工具+高清工具

植物大战僵尸杂交版&#xff0c;不仅继承原作的经典玩法&#xff0c;而且引入了全新的植物融合玩法&#xff0c;将各式各样的植物进行巧妙的杂交&#xff0c;孕育出前所未有、功能各异的全新植物。 创新的杂交合成系统 游戏引入了创新的杂交合成系统&#xff0c;让玩家可以将不…

Unity DOTS技术(五)Archetype,Chunk,NativeArray

文章目录 一.Chunk和Archetype什么是Chunk?什么是ArchType 二.Archetype创建1.创建实体2.创建并添加组件3.批量创建 三.多线程数组NativeArray 本次介绍的内容如下: 一.Chunk和Archetype 什么是Chunk? Chunk是一个空间,ECS系统会将相同类型的实体放在Chunk中.当一个Chunk…

DP读书:《ModelArts人工智能应用开发指南》(一)人工智能技术、应用平台

怎么用ModelArts人工智能应用 训练底座训练案例 盘古矿山模型Main config.py 训练底座 训练案例 盘古矿山模型 Main 下面是快速助手 https://support.huaweicloud.com/qs-modelarts/modelarts_06_0006.html 准备开发环境 在ModelArts控制台的“ 开发环境 > Notebook”页面…

【C#学习笔记】属性和字段

文章目录 前言属性和字段的区别字段访问修饰符和关键字定义变量类型的定义变量命名变量的赋值 属性 不同的使用情况 前言 最近在工作的过程中常常会觉得自己在程序设计方面的能力还是有欠缺。例如一直对于变量的声明感到不足&#xff0c;在工作中为了图方便总是直接public定义…