Python入门-基本数据类型-字符串类型及其操作

字符串类型存储的数据是字符串,字符串是一个由字符构成的序列。Python字符串是不可变的
不支持动态修改。本节将对字符串进行简单介绍,包括字符串的定义方式、格式化、索引、切片
拼接、重复和成员归属等。

1.字符串的定义方式

1.1单行字符串

单行字符串可以由一对单引号( ' )或双引号( " ) 作为边界来表示,单引号和双引号作用相同。
例如
"hello"
'hello'

双引号定义的字符串可以含有单引号,但是不能直接含有双引号。同理,单引号定义的字符串
也不能直接含有单引号。这是因为Python解释器会匹配先出现的一对引号,导致后面的内容无法处
理。错误做法示例如下。

'let's go'

此时代码块会出现错误高亮提示,运行时程序发生异常,异常类型为SyntaxError,表示语法错
误,异常信息如下。

  File "/root/Python_03/main.py", line 1
    'let's go'
         ^
SyntaxError: invalid syntax

要解决这个问题,可以对字符串中的单引号、双引号等特殊字符进行转义处理,即在特殊字符
前面加上转义字符"\"。此时解释器不再将特殊字符视为字符串的语法标志,而是将其与转义字符视
为一个整体。具体示例如下。

'let\'s go'

常用转义字符表

转义字符说明转义字符说明
\(在行尾时)续行符\t横向制表符
\\反斜杠符\b退格
\'单引号\r回车
\"双引号\f换页
\n回车换行\a响铃

如果需要忽略字符串中的转义字符,则可以在字符串的前面添加r或者R。例如,要打印某个文
件的路径“C:\Windows\tracing”,其中“t”构成了一个转义字符,导致字符串输出格式不符合预期,
此时在字符串前加r或R即可忽略转义字符的原有作用。

在字符串前使用r或R。

print('C:\Windowstracing')      #转义字符起作用
print(r'C:\Windows\tracing')    #在字符串前加r

运行结果如下。

C:\Windows racing
C:\Windows\tracing

编程建议:字符串的定义可以选择单引号或双引号,建议在编程中统一使用其中一种。一般情况下,双引号在面对缩写和所有格时更加友好,例如,“Lets”或“Im”,无须变换引号形式或使用转义字符。如果字符串包含引号,应当优先使用另一种形式的引号来包含字符串,而非使用转义字符。

1.2多行字符串

多行字符串由一对三引号包含,可以是三单引号也可以是三双引号。三引号中包含的所有字符
都属于字符串内容,包括空格、换行等。三引号中可以包含单引号、双引号,无须转义,所有字
均以原始形态打印出来,所见即所得。

打印圣诞树。

print("""
"这是一个圣诞树"
     *
    ***
   *****
***********
     *""")

运行结果如下

"这是一个圣诞树"
     *
    ***
   *****
***********
     *

2.字符串格式化

字符串格式化是指预先制定一个带有空位的模板,然后根据需要对空位进行填充。例如,预先制定一个模板“一年的_学期我学习了_门课程”,然后在下面线的位置填充内容,可以用以下代码实现。

print("{}年的{}学期我学习了{}门课程".format(2022,"上",20))

输出结果如下。

2022年上学期我学习了20门课程

2.1 format()方法的基本用法

字符串 format() 方法的基本使用格式是:
模板字符串.format(参数列表)
模板字符串中有一系列用“{}”表示的空位,format0方法可以将以逗号间隔的参数列表按照对
应关系替换到这些空位上。如果“(}”中没有序号,则按照出现的顺序进行替换.
如果“{}”中指定了参数序号,则会按照序号对参数进行替换,参数从0开始编号.

 2.2 format()方法的格式处理

format()方法的模板字符串的空位中不仅可以填写参数序号,还可以有其他的格式处理形式,此
时空位的样式如下。

(参数序号:格式处理内容}

格式处理内容要按照以下顺序使用。
(1)填充:填充单个字符,不指定时用空格填充。
(2)对齐:“<”为左对齐,“>”为右对齐,“^”为居中对齐。
(3)符号:“+”表示在正数前加正号,负数前加负号;“-”表示正数不变,负数加负号;空格表示正数加空格,负数加负号。
(4)宽度:指定空位所占宽度。
(5)分隔符:用逗号“,”分隔数字的千位,适用于整数和浮点数。
(6)精度:用“.precision”指定浮点数的精度或字符串输出的最大长度,如“.5”
(7)类型:用于指定类型,如表所示。

类型说明
a对字符串类型格式化
b将整数输出为对应的二进制数
c将整数输出为对应的Unicodc字符
d将整数输出为对应的十进制数
o将整数输出为对应的八进制数
x或X将整数输出为对应的小写或大写的十六进制数
e或E将浮点数输出为e或E的指数形式
f将浮点数标准输出
%输出浮点数的百分比形式

格式化输出学生信息。

name ="张三"
studentId="202201"
#用-占位,宽度为10,姓名和学号居中
print("我叫{0:-^10},学号为(1:-^10}".format(name,studentId))

运行结果如下。

我叫----张三----,学号为--202201--

3.f字符串

Python 3.6提供了一种新的格式化字符串的方法——f-strings,即f字符串。f字符串的格式化处理与format()方法类似,但语法比其简洁。Python 3.6及以后的版本推荐使用f字符串进行字符串的格式化。f字符串用花括号“{}”表示被替换的字段。

f字符串的使用。

name ="张三"
studentId="202201"
print(f"我叫(name),学号为(studentId}")

运行结果如下。

我叫张三,学号为202201

4.字符串的索引与切片

字符串是一个不可变的字符序列,每个字符都有其编号,也称为索引。Python的索引从0开始递增,字符串的第1个字符的索引为0,第2个字符的索引为1,以此类推;索引也可以是负数,字符串的最后1个字符的索引为-1,倒数第2个字符的索引为-2,如图所示。、

studyhard
0123456789
-10-9-8-7-6-5-4-3-2-1

根据索引可以获取字符串中的字符,例如,获取“study hard”中的字符“h”,可以通过以下代码实现。

word = "study hard"
word [6]
word [-4]

Python提供了len()函数计算字符串的长度,语法格式如下。

len(string)

其中string为要进行长度计算的字符串。

计算字符串“study hard”的长度。

length = len("study hard")
print(length)

运行结果如下。

10

len()函数在计算字符串长度时,不区分字母、汉字、数字、标点和特殊字符等,例如,字符串“学习Python使我快乐!#¥”,用len0)函数计算其长度,“学”“p”“!”“#”等各占一位,字符串长度为15。

字符串切片是指从字符串中截取部分字符组成新的字符串,且不会使原字符串产生变化,其语
法格式如下。

sname[start :end :step]

参数说明

参数说明
sname字符串名称
start切片开始的位置(包括此位置),不指定时默认为0
end切片结束的位置(不包括此位置),不指定时默认为序列的长度
step切片的步长,不传值时默认为1,最后的冒号也可以省略

字符串的切片。

sname ="学习Python使我快乐"               #共12个字符
print("sname[:]:",sname[:])              #取到字符串所有字符
print("sname[3:8]:",sname[3:8])          #默认步长为1
print("sname[:8]:"sname[:8])             #默认从索引0开始,步长为1
print("sname[3:]: ",sname[3:])           #默认到字符串末尾,步长为1
print("sname[3:8:2]:",sname[3:8:2])      #设置步长为2
print("snamel:-4]:"sname[:-4])           #索引0到-4,不含-4
print("sname[-8:-3:2]:",sname[-8:-3:2])  #索引-8到-3,不含-3,步长为2
print("sname[8:3:-2]:"sname[8:3:-2])     #索引8到3,不含3,步长为-2

运行结果如下。

sname[:]:学习Python使我快乐
sname[3:8l:ython
sname[:8]:学习Python
sname[3:]:ython使我快乐
sname[3:8:2]:yhn
sname[:-4]:学习Python
sname[-8:-3:2]:to使
sname[8:3:-2]:使ot

5.字符串的拼接与重复

5.1.字符串拼接

使用“+”可以实现字符串拼接,将多个字符串连接起来并产生一个字符串对象。

name ="张三”
action ="吃了早饭"
print(name + action)

运行结果如下。

张三吃了早饭

这种机制只能用于字符串类型之间的拼接,否则就会发生异常。

例如.字符串类型与整型的拼接。

str1 ="我今天吃了"
num = 3
str2="碗饭"
print(strl +num + str2)

此时程序异常,异常类型为TypeError,表示类型错误,异常信息如下,

Traceback (most recent call last):
    File "c:\1000phone\test.py",line 4,in <module>
        print(strl +num + str2)
TypeError: can only concatenate str(not "int") to str

可以用str()函数和repr()函数解决此类问题。str(0函数和repr()函数是将对象转换为字符串类型的
种机制:str()函数会将对象转换为合理形式的字符串,以便用户理解;而repr()函数会创建一个字
串,用合法的Python表达式来表示对象,以供Python解释器读取。

str()函数及repr()函数的使用。

action ="Hi,1000phone"
print("str()函数处理后:"+str(action))
print("repr()函数处理后:"+repr(action))
strl="我今天吃了"
num =3
str2="碗饭"
print("用str()函数实现字符串拼接:"+str1+str(num)+ str2)

运行结果如下。

str()函数处理后:Hi,1000phone
repr()函数处理后:'Hi,1000phone'
用str()函数实现字符串拼接:我今天吃了3碗饭

针对字符串,Python语言提供了几个基本操作符

操作符描述
x + y
连接两个字符串 x y
x * n n * x
复制 n 次字符串 x
x in s
如果 x s 的子串,返回 True ,否则返回 False

5.2.重复字符串

使用“*”可以将字符串重复多次。

print("study"* 5)

运行结果如下。

studystudystudystudystudy

6.字符串的成员归属

字符串的成员归属需要用到成员运算符,成员运算符能够判断指定序列是否包含某个值。Python
的成员运算符包括in和not in,详细说明如下。

(1)in:如果在指定序列中找到值,返回True,否则返回False。
(2)not in:如果在指定序列中没有找到值,返回True,否则返回False.

査找字符串是否含有某字符。

sentence ="i want to eat meat"
print("e在sentence中:","e" in sentence)
print("e不在sentence中:","e" not in sentence)

运行结果如下。

e在sentence中:True
e不在sentence中: False

实例解析:恺撒密码

恺撒撒密码是古罗马恺撒大帝用来对军事情报进行加密 的算法,它采用了替换方法对信息中的每一个英文字符 循环替换为字母表序列该字符后面第三个字符:
原文: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
密文: D E F G H I J K L M N O P Q R S T U V W X Y Z A B C

 

原文字符 P ,其密文字符 C 满足如下条件:
                C = ( P + 3 ) mod 26
解密方法反之,满足:
                P = ( C – 3 ) mod 26

1.恺撒密码-加密

恺撒密码的加密算法程序首先接收用户输入的文本,然 后对字母a-z 和字母 A-Z 按照密码算法进行转换。
ptxt = input("请输入明文文本: ")
for p in ptxt:
    if "a" <= p <= "z":
        print(chr(ord("a")+(ord(p)-ord("a")+3)%26), end='')
elif "A" <= p <= "Z":
    print(chr(ord("A")+(ord(p)-ord("A")+3)%26), end='')
else:
    print(p, end='')

运行结果如下。

请输入明文文本: This is an excellent Python book.
Wklv lv dq hafhoohqw Sbwkrq errn.

2.恺撒密码-加密

恺撒密码的解密算法程序首先接收用户输入的加密文本, 然后对字母a-z 和字母 A-Z 按照密码算法进行反向转换.
etxt = input("请输入加密后文本: ")
for p in etxt:
    if "a" <= p <= "z":
        print(chr(ord("a")+(ord(p)-ord("a")-3)%26), end='')
elif "A" <= p <= "Z":
    print(chr(ord("A")+(ord(p)-ord("A")-3)%26), end='')
else:
    print(p, end='')

运行结果如下。

请输入加密后文本: Wklv lv dq hafhoohqw Sbwkrq errn.
This is an excellent Python book.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

论文解读:【CVPR2024】DUSt3R: Geometric 3D Vision Made Easy

论文“”https://openaccess.thecvf.com/content/CVPR2024/papers/Wang_DUSt3R_Geometric_3D_Vision_Made_Easy_CVPR_2024_paper.pdf 代码&#xff1a;GitHub - naver/dust3r: DUSt3R: Geometric 3D Vision Made Easy DUSt3R是一种旨在简化几何3D视觉任务的新框架。作者着重于…

Java高级重点知识点-17-异常

文章目录 异常异常处理自定义异常 异常 指的是程序在执行过程中&#xff0c;出现的非正常的情况&#xff0c;最终会导致JVM的非正常停止。Java处 理异常的方式是中断处理。 异常体系 异常的根类是 java.lang.Throwable&#xff0c;&#xff0c;其下有两个子类&#xff1a;ja…

实验4 图像空间滤波

1. 实验目的 ①掌握图像空间滤波的主要原理与方法&#xff1b; ②掌握图像边缘提取的主要原理和方法&#xff1b; ③了解空间滤波在图像处理和机器学习中的应用。 2. 实验内容 ①调用 Matlab / Python OpenCV中的函数&#xff0c;实现均值滤波、高斯滤波、中值滤波等。 ②调…

java基于ssm+jsp 多用户博客个人网站

1管理员功能模块 管理员登录&#xff0c;管理员通过输入用户名、密码等信息进行系统登录&#xff0c;如图1所示。 图1管理员登录界面图 管理员登录进入个人网站可以查看&#xff1b;个人中心、博文类型管理、学生博客管理、学生管理、论坛信息、管理员管理、我的收藏管理、留…

Linux多进程和多线程(一)-进程的概念和创建

进程 进程的概念进程的特点如下进程和程序的区别LINUX进程管理 getpid()getppid() 进程的地址空间虚拟地址和物理地址进程状态管理进程相关命令 ps toppstreekill 进程的创建 并发和并行fork() 父子进程执行不同的任务创建多个进程 进程的退出 exit()和_exit() exit()函数让当…

微短剧市场还能火多久?短剧小程序是否有必要搭建?,现在入场到底晚不晚?

我公司在2019年开始都是做软件开发的&#xff0c;从2022到现在&#xff08;2024&#xff09;特别深有体会&#xff0c;在2022年的时候我公司还是在全部做外包项目&#xff0c;一年大概遇到了10多个咨询短剧领域的软件定制&#xff0c;但是当时我只是以为是一个影视播放的程序&a…

7.优化算法之分治-快排归并

0.分治 分而治之 1.颜色分类 75. 颜色分类 - 力扣&#xff08;LeetCode&#xff09; 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums &#xff0c;原地对它们进行排序&#xff0c;使得相同颜色的元素相邻&#xff0c;并按照红色、白色、蓝色顺序排列。 我们使用整数…

推动多模态智能模型发展:大型视觉语言模型综合多模态评测基准

随着人工智能技术的飞速发展&#xff0c;大型视觉语言模型&#xff08;LVLMs&#xff09;在多模态应用领域取得了显著进展。然而&#xff0c;现有的多模态评估基准测试在跟踪LVLMs发展方面存在不足。为了填补这一空白&#xff0c;本文介绍了MMT-Bench&#xff0c;这是一个全面的…

Django 模版继承

1&#xff0c;设计母版页 Test/templates/6/base.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><!-- 修正了模板标签的全角字符问题 -->{% block title %}<title>这个是母版页</title>{…

leetCode.93. 复原 IP 地址

leetCode.93. 复原 IP 地址 题目思路&#xff1a; 代码 // 前导零的判断方法&#xff1a;如果第一个数是0&#xff0c;且第二个数还有数据&#xff0c;那就是前导0&#xff0c;要排除的 // 注意跟单个 0 区分开 class Solution { public:vector<string> res;vector<…

Opencv+python模板匹配

我们经常玩匹配图像或者找相似&#xff0c;opencv可以很好实现这个简单的小功能。 模板是被查找目标的图像&#xff0c;查找模板在原始图像中的哪个位置的过程就叫模板匹配。OpenCV提供的matchTemplate()方法就是模板匹配方法&#xff0c;其语法如下&#xff1a; result cv2.…

【活动感想】筑梦之旅·AI共创工坊 workshop 会议回顾

目录 &#x1f30a;1. 会议详情 &#x1f30a;2. 会议回顾 &#x1f30d;2.1 主持人开场 &#x1f30d;2.2 元甲-小当家 AI 驱动的创意儿童营养早餐料理机&今天吃什么App &#x1f30d;2.3 Steven- A l 心理疗愈认知 &#x1f30d;2.4 伯棠-诸子百家(xExperts)-多智能…

私有部署Twikoo评论系统

原文&#xff1a;https://blog.c12th.cn/archives/12.html 前言 以前用 MongoDB Vercel 搭建 Twikoo 老是有点小问题&#xff0c;所以就放弃了。无意中看到可以用 docker 来搭建&#xff0c;正好有台服务器可以尝试下。 私有部署 Twikoo 版本要求 1.6.0 或以上 &#xff0c; …

AMD Anti-Lag 2抗延迟技术落地 CS2首发、延迟缩短95%

AMD发布了全新重磅驱动程序Adrenalin 24.6.1版本&#xff0c;包括首发落地Anti-Lag 2抗延迟技术、优化支持新游戏、升级支持HYPR-Tune、支持新操作系统、优化AI加速与开发、扩展支持Agility SDK、修复已知Bug&#xff0c;等等。 一、Anti-Lag 2 今年5月份刚宣布&#xff0c;重…

【计算机毕业设计】基于Springboot的智能物流管理系统【源码+lw+部署文档】

包含论文源码的压缩包较大&#xff0c;请私信或者加我的绿色小软件获取 免责声明&#xff1a;资料部分来源于合法的互联网渠道收集和整理&#xff0c;部分自己学习积累成果&#xff0c;供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者…

信号与系统-实验6-离散时间系统的 Z 域分析

一、实验目的 1、掌握 z 变换及其性质&#xff1b;了解常用序列的 z 变换、逆 z 变换&#xff1b; 2、掌握利用 MATLAB 的符号运算实现 z 变换&#xff1b; 3、掌握利用 MATLAB 绘制离散系统零、极点图的方法&#xff1b; 4、掌握利用 MATLAB 分析离散系统零、极点的方法&a…

kicad第三方插件安装问题

在使用KICAD时想安装扩展内容&#xff0c;但是遇到下载失败&#xff0c;因为SSL connect error。 因为是公司网络&#xff0c;我也不是很懂&#xff0c;只能另寻他法。找到如下方法可以曲线救国。 第三方插件包目录 打开存放第三方插件存放目录&#xff0c;用于存放下载插件包…

vue3+vite+nodejs,通过接口的形式请求后端打包(可打包全部或指定打包组件)

项目地址https://gitee.com/sybb011016/test_build 打包通过按钮的形式请求接口&#xff0c;让后端进行打包&#xff0c;后端使用express-generator搭建模版。前端项目就在npm init vuelatest基础上添加了路由 如果只想打包AboutView组件&#xff0c;首先修改后端接口。 //打…

Linux如何安装openjdk1.8

文章目录 Centosyum安装jdk和JRE配置全局环境变量验证ubuntu使用APT(适用于Ubuntu 16.04及以上版本)使用PPA(可选,适用于需要特定版本或旧版Ubuntu)Centos yum安装jdk和JRE yum install java-1.8.0-openjdk-devel.x86_64 安装后的目录 配置全局环境变量 vim /etc/pr…

运营商、银行、国企等单位开发岗24届Offer薪资与福利汇总

本文介绍24届校园招聘中&#xff0c;地理信息科学&#xff08;GIS&#xff09;专业硕士研究生所得Offer的整体薪资情况、福利待遇等。 在2024届秋招与春招中&#xff0c;我累计投递了170余个单位&#xff0c;获得17个Offer&#xff1b;平均每投递10个简历才能获得1个Offer。说句…