文章目录
- 字符串
- 1.1 字符串介绍
- 1.2 字符串的定义
- 1.3 字符串的输入和输出
- 1.3.1 字符串的索引
- 1.4 字符串切片
- 1.4.1 切片几种写法
- 1.5 字符串常用函数
- 1.5.1 find()
- 1.5.2 index()
- 1.5.3 扩展知识: rfind()和rindex()
- 1.5.4 count()
- 1.5.5 replace()
- 1.5.6 split()
- 1.5.7 join()
- 1.6 字符串Api 扩展知识
- 1.7 练习: 字符串综合练习
字符串
- 掌握字符串的输入和输出
- 会使用切片的方式访问字符串中的值
- 了解常见函数
1.1 字符串介绍
- 什么是字符串?
- 其实说到字符串,这个概念没有具体的说法,但是我们根据平时的归纳总结,相当于文本类型,
- 字符串就是把字符连在一直,串成一串又一串;字符串内可以包含数字、字母、特殊符号等所有内容;
- 在Python中只要对一些内容加上对双引号或一对单引号,就默认为是字符串;
1.2 字符串的定义
-
定义字符串的格式有三种形式:
- 单引号
# 格式1: 单引号 name = '王一博'
- 双引号
# 双引号 name = "王一博"
- 三引号, 可以自由变化输出格式
#三引号 name = '''王一博''' # 三引号的定义什么样,输出就什么样? 是一种有格式的. name_2 = ''' i ma 王一博 '''
- 如何输出单引号
# 想输出的带上字符串格式的, 只需要使用双引号,里面包含单引号即可. name= " 我是'王一博' " print(name) # 输出格式为: 我是'王一博'.
- 转义字符的使用
- 如果在双引号中输出单引号是可以的,但是如果在单引号中输出单引号呢?
- 这就需要使用转义字符
\ \
#c = '你好我是 '王一博'' 这样的形式是错误的? c = '你好我是 \'王一博\'' print(f"转义字符输出格式:{c}")
1.3 字符串的输入和输出
- 从控制台接收一个 输入,它的类型就是字符串。
- 使用的函数是
input()
- 注意: 如果想使用其他类型的需要转换格式. 如: 将输入的 字符串类型转换为int()
""" 1. 字符串的输入和输出 输入需要是使用 input的函数 注意输入的类型是 string 类型. """ # 1. 从控制台输入姓名,输入类型是 string 类型 name = input("请输入姓名: ") print(type(name)) # 查看数据类型 type() print(name) #2. 从控制台输入一个年龄,(需要注意年龄的数据类型应该是整形) age = int(input("请输入年龄 : ")) # 通过使用int()数据类型转换将str类型转为int类型 print(type(age)) # 查看数据类型 type() print(age)
- 使用的函数是
- 字符串的输出
- 使用的函数是
print()
""" 1.字符串的输出有几种形式 使用的函数是 input() 直接输出 字符串格式化 f"{},{}" 占位符方式 %s 字符串 %d 数字 %f 小数 print("我的名字%s"%name) print("%s,%d"%(name,age)) """ name = "王一博 " age = 18 #第一种输出方式 print(name,age) #第二种输出方式 字符串格式化 print(f"我是,{name},我的年龄,{age}") # 单个占位符输出 print("名字%s"%name) #多个占位符输出 print("我的名字%s,我的年龄%d"%(name,age))
- 使用的函数是
1.3.1 字符串的索引
-
字符串的每一个字符都是有编号的.
- 索引, 下标,脚标,index ,为什么有这么多的名称 ?
- 字符串的索引是从0 开始的.
- 正数索引从0开始 和 负数索引,从 -1 开始
-
len()
方法 和 字符串[索引]- 字符串[索引] # 根据字符串索引, 来获该索引位置的字符.
- 正数索引 ,从前往后数
- 负数索引,从后往前数负数开始时-1.
len(字符串)
方法是 获取字符串的长度
""" 1. 字符串的下标是从零开始的. 为什么会有脚标,下标,索引 ,index这么多称呼 主要是翻译问题, 翻译文献导致每个翻译词汇不同,但指的是一个意思 常用格式 字符串[索引] # 根据字符串索引, 来获取该字符. len(字符串) 获取字符串的长度 2. 有正数索引 也有负数索引 正数: 从前往后 负数: 从后往前 """ s = "helo " a= s[0] # 从零开始,通过索引获取字符. b= len(s) # 空格也算位置. print(a,b) print("-"*20) #复制 "-" # 负数索引 a_1 = s[-3] print(a_1)
- 字符串[索引] # 根据字符串索引, 来获该索引位置的字符.
-
扩展知识 :
- 字符串最大长度
s = "helo " # 可以得知一个字符串最大索引是? print(int(len(s)-1)) #相当于字符串的最大长度-1
1.4 字符串切片
-
在 Python 中,字符串切片指的是从一个字符串中选取一部分子串的操作.
- 可以理解为 截取字符串.
- 需要通过 索引 实现
-
注意事项: 包左不包右。 中间使用
:
冒号隔开.string[start:end:step]
- 其中
string
表示要进行切片的字符串,start
表示起始索引(默认为 0),end
表示结束索引(默认为字符串的长度),step
表示步长(默认为 1)。
- 其中
-
字符串切片,操作还支持快捷语法,如果不指定起始索引和步长,可以直接写成
string[:end]
或string[start:]
或者string[:]
。 -
举例来说, 假设有一个字符串
s = "Hello, world!"
,如果我们想要选取其中的子串"Hello"
,可以这样操作:s[0:5]
- 这里的
0
表示起始索引,5
表示结束索引,注意结束索引是不包含在选取的子串中的,即包左不包右。运行结果为"Hello"
。
- 这里的
1.4.1 切片几种写法
-
字符串 [start : end]
- 字符串的切片 就是使用 索引实现.
len()
方法,计算字符串的长度.
# 第一种写法 s = "hello,world" #字符串索引下标从0开始. # s[start:end] a = s[0:5] # 相当于 [1:5) 包左不包右 print(a) # 输出结果: ello #2. 字符串的长度 len()方法的使用. print(len(s)) #从1开始计算.
-
字符串 [start : end : step]
- step 就是计算间隔.
#2. 第二种写法 s[start:end:step] 其中step 是 计算间隔 s = "hello,world" a = s[0:8:2] #从0开始到8结束(不包含8 ) [0:8),中间间隔为2 #相当于 0 2 4 6. print(a)# hlow
-
可以将切片语法结构中部分省略.
s[ :end]
即: 从0开始s[start: ]
即: 从start开始到索引长度结束len(s)-1
#3. 种写法可以省略 # 切片,以某个索引结尾. print(f"输出的是什么{s[:5]}") #相当于 [0:5) 相当于从零开始. # 切片 ,从头开始... print(f"输出的是什么{s[3:]}")# 相当于 [3:end) 相当于从3开始 len(s)-1 结束.
-
将切片中语法结构都省略不写
s[ : : ]
省略了start end step 相当于全部输出.
#第4种 省略语法结构 s = "hello,world" a = s[::] #相当于全部输出 print(a) #hello,world
-
反转输出
s[: : -1]
倒着输出
#5. 反转写法 s = "hello,world" print(f"反转格式 {s[::-1]}") # dlrow,olleh ,相当于从后面开始取.
-
负数取值法
- 最后一位就是 -1 ,相当于从后往前找
#6. 负数取值法 # 分析一波, s = "hello,world" 相当于从后往前寻找. 从-4开始: 从后面开始数d, 然后到-1结束 # 相当于从后面数, -1 就是最后一位, -4 就是往前面数位数. [-4,-1) 也是一样的道理 s = "hello,world" print(f"反转格式{s[-4:-1]}") #orl
1.5 字符串常用函数
1.5.1 find()
-
find函数用于检测字符串中 是否包含子字符串.
- 如果包含子字符串则返回开始的索引值, 如果没有查询到则返回 -1.
#1.语法格式 str.find(sub_str,start,end)
- sub_str :要查找的内容, 类型str (必选参数)
- start : 从开始位置, 默认是 0 (可选参数)
- end : 结束的位置, 查找到哪里结束 (可选参数)
-
find( )
方法的使用.#1.find 函数和 rfind函数的使用 s = "12345678" a = s.find("456") print(a) # 如果包含则返回开始的索引值 3 #第二种写法 b = s.find("345",1,6) print(b) # 开始索引 2 #如果没有查到则返回 -1 c = s.find("134") print(c)
1.5.2 index()
-
index函数,检测字符串中 是否包含子字符串,
- 如果有则返回开始索引,否则则抛出异常.
#1. 语法格式 str.index(sub_str,start,end)
- sub_str :要查找的内容, 类型str (必选参数)
- start : 从开始位置, 默认是 0 (可选参数)
- end : 结束的位置, 查找到哪里结束 (可选参数)
-
index方法的使用
- 其实同find方法一样.
s = "12345678" a = s.index("234") print(a) # 返回从1开始 #第2中写法 b = s.index("234",0,7) print(b) # 如果没有找到的话,则报错 c = s.index("789") print(c) # ValueError: substring not found
1.5.3 扩展知识: rfind()和rindex()
-
相当于从后往前找, 从后面第一次出现的.
- 二者用法几乎一致.
- 思考一下: find()函数用的多, 还是 index()用的多 ?
s = "123456789876" print(s.rfind("8")) #9 从后面找第一个出现的 print(s.find("8")) # 7 从前面找第一个出现的. print("-"*20) #做一个华丽的分割线 print(s.rindex("8")) #9 print(s.index("8")) #7
1.5.4 count()
-
count() 函数是, 用于统计字符串中某个子字符串出现的次数。
- 它的语法格式如下:
# 其中 satrt ,end 属于可选参数. str.count(sub,start,end)
- sub: 要查找的子字符串。
- start:可选参数,查找的起始位置,默认为 0。
- end:可选参数,查找的结束位置,默认为字符串的长度。
-
count()
语法练习# 1.count函数的使用方法 s = "hello and world and you" print(s.count("and")) # 出现 2次 #根据起始位置 和 结束位置进行统计. print(s.count("and", 7, 19)) # 出现1次 print(s.count("and",6)) # 出现2次, 相当于从6开始到结束
1.5.5 replace()
-
replace()
方法用来替换字符串中指定子字符串的函数。 -
替换之后对原始字符串没有影响,会重新生成一个新的字符串.
- 它的语法格式如下:
#1,语法格式如下 str.replace(old, new,count])
- 其中,old 参数表示要被替换的子字符串,new 参数表示替换后的新字符串,count 参数表示最多替换的次数,如果省略该参数,则表示全部替换。
-
两种替换情况 根据可选参数
count
确定- 全部替换,
count
不使用 - 部分替换
count
使用
s = "hello and world and you" # #1. 相当于将 and 全部替换成了 or print(s.replace("and", "or")) #2. 部分替换 只替换1次 print(s.replace("and","or",1)) #3.输出查看原来的字符串是否发生改变 print(s)
- 全部替换,
1.5.6 split()
-
split() 方法, 用来将字符串按照某个分隔符进行分割,
- 并返回一个分割后的字符串列表。
-
split() 方法有一个可选参数
sep
用来指定分割符,如果不传入任何参数,则默认按照空格分割。- 分割后 得到的每一个字符串元素 可以通过索引访问。
str.split(sep) # 按照格式进行切割
str.sprlit() #默认不写就是按照空格切分
- split() ,有两个可选参数
- count 如果不写,默认全部切分,
- sep ,按照什么格式进行切分
- 也可以按照出现重复次数多的字符进行切分.(了解即可)
# 1.split() 方法使用 s = "123,456,789 101112 123 456" #1.1 我可以按照逗号切分,返回一个list容器 print(s.split(",")) #1.2 我可以按照空格切分,返回一个list容器 print(s.split(" ")) #1.3 不传递参数 ,按照默(空格)切分 print(s.split()) # 2. count可选参数 默认切割几次, print(s.split(",",1)) #对比发现,只对第一个逗号进行切割. #2.1 可以按照出现的字符进行切分,了解即可. print(s.split("123"))
1.5.7 join()
-
join()
它可以将一个列表或元组中的多个字符串元素,按照 指定的分隔符 连接成一个 单独的字符串。- 可以理解为: 将分隔符与要切割的字符串组成一个新的字符串.
-
join()
方法的语法格式如下:str.join(iterable) # 也可以放入 list 列表
- 其中,str 是指定的分隔符,iterable 可以是一个包含多个字符串元素的列表或元组。
-
练习如下:
str.join(列表),
也可以放列表. 然后根据分割符,进行遍历输出, 生成新的字符串.
# 1.join使用方法介绍 s = "hello" # 1.将原有的字符串进行了遍历.并添加了分隔符. new_s = "-".join(s) print(new_s) # h-e-l-l-o #2.使用空格进行分割了. new_s1 = " ".join(s) print(new_s1) # h e l l o #3. 定义一个list列表.,可以切割list->str a = ["a","b","c","d"] print(a) #生成了字符串 #print(type(" * ".join(a))) print(" * ".join(a)) # a * b * c * d
1.6 字符串Api 扩展知识
-
capitalize()
- 把字符串的第一个字符大写
mystr.capitalize()
# mystr.capitalize() s = "hello,world" print(s.capitalize()) #Hello,world
-
title()
- 把字符串的每个单词首字母大写
a.title()
a = "hello world" print(a.title()) 'Hello,World'
-
startswith()
是则返回 True,否则返回 False.- 检查字符串是否是以 hello 开头
- 也可以检测 是否以单词开头 h
# mystr.startswith(hello) s = "hello,world" print(s.startswith("h")) #也可以使用 单词开头 print(s.startswith("hello"))
-
endswith
判断字符串是否以指定后缀结尾.- 如果是返回True,否则返回 False.
str_1 = "hello,world" #判断字符串以什么后缀结尾 print(str_1.endswith("ld")) # True
-
lower()
和upper()
- 转换 mystr 中,大小写.
#1.大写变小写 str_2 ="HELLO,WORLD" print(str_2.lower()) #2.小写变大写 str_1 ="hello,world" print(str_1.upper())
1.7 练习: 字符串综合练习
-
判断单词 great是否在字符串words中,如果在,则将每一个great后面加一个s, 如果不在则输出 great不在该字符串中
-
将整个字符串的每一个单词都变成小写,并使每一个单词的首字母变成大写
-
去除首尾的空白,并输出处理过后的字符串
words = " great craTes Create great craters, But great craters Create great craters " # 判断单词great是否在这个字符串中 if 'great' in words: # 将每一个great替换成greats words = words.replace("great", "greats") # 将单词变成小写 words = words.lower() # 将每一个单词的首字母都大写 words = words.title() # 去除首尾的空白 words = words.strip() # 最后进行输出 print(words) else: print("great不在该字符串中")