一、获取字符
1.单个字符
原理:字符串中的每一个字符都会对应一个唯一的下标(索引)
下标:用来表示字符在字符串中的位置
下标方式:
1.0开始依次增加 , 0 对应的第一个字符(0~字符串长度-1)
2.-1开始依次减少 , -1 对应的是最后一个字符(-1~ - 字符串长度)
a.语法:
字符串[下标] - 获取字符串中指定下标的对应的字符
b 说明:
字符串 - 字面量(只要结果是字符串的表达式都可以)字符串变量
[]- 固定写法
下标 - 需要获取的字符对应的下标
注意:这里的下标不能越界,否则会报错
示例:
result = 'how are you'[4]
# 获取字符串下标是4的字符,并且赋给变量reault
print(result) # a
result = 'how are you'[12]
# IndexError: string index out of range
# 下标错误:字符串下标超过范围
str1 = 'good good study! day day up!'
# str 类型名 会覆盖原来的类型功能,不报错,但是不建议作为变量名
print(str1[10])
2.部分字符(字符串切片)
方法1:
a. 语法:
字符串[开始下标:结束下标:步长] - 从开始下标开始获取到结束下标前为止(顾头不顾尾)
每次下标止加上步长去获取下一个元素
b. 说明:
字符串 - 有结果的表达式
[] - 固定写法
开始下标、结束下标 - 下标值(下标可以越界)
步长 - 整数(正数和负数都可以)
正数:从开始下标从前往后获取
负数:从开始下标从后往前获取
c. 注意:
步长为正:
要求:开始下标对应的字符的位置必须在结束下标对应的字符的位置的 前面,否则结果是空串
步长为负:
要求:开始下标对应的字符的位置必须在结束下标对应的字符的位置的后面,否则结果是空串
示例:
str1 = 'hello python'
print(str1[0:4:-2]) # 切片的时候,倒过来取不到就是空串
print(str1[0:-1:2]) # 下标数值与大小无关
print('结果3', str1[-1:-100:-1]) # 结束下标越界
print('结果4', str1[100:-100:1]) # 下标越界
# 练习:获取一个字符串中所有下标奇数的字符(从前往后)
str2 = '1234567'
print(str2[1:100:2]) # 2 4 6
方法2:
字符串[开始下标:结束下标] - 省略步长
省略步长:默认步长为1
过程:从开始下标开始到结束下标前为止,一个个取
方法3:字符串[:结束下标:步长](省略开始下标和结束下标)
a. 省略开始下标
步长为正:从第一个字符开始取到结束下标前为止
步长为负:从字符串的最后一个字符开始取到结束下标前为止
b. 省略结束下标
字符串[开始下标::步长]
步长为正:从开始下标开始取到最后一个字符为止;
步长为负:从开始下标开始取到第一个字符为止
示例:
str4 = 'when i was yuong!'
print(str4[:6], str4[:6:-1]) # when i !gnouy saw
print(str4[2:], str4[2::-1]) # en i was yuong! ehw
print(str4[:]) # 从前到后
print(str4[::-1]) # 从后往前
注:不会改变字符串的的结果,只是获取内容
二、字符串运算符
1. 数学运算符:+ *
2. 比较运算符:>, <, ==, !=, >=, <=
支持所有的比较运算符
1.数学运算符
a. +: 字符串1 + 字符串2
作用:将两个字符串拼接在一起产生一个新的字符串
注意:字符串只能是同类型的数据进行运算!
b. *: 字符串 * n - n是正整数
作用:字符串重复n次产生一个新的字符串
str1 = 'abc' + '123'
print(str1)
# print('abc' + 123) # TypeError: must be str, not int
# 类型错误:必须是字符串,不能是整型
new_str = 'abc'*3 # abcabcabc
print(new_str)
print('sdf' + 'dfd'*2) # sdfdfddfd
2. 比较运算符
a.比较是否相等
==, != 可以判断两个字符串是否相等或者不相等
b.比较大小
第一步:两个字符串字符一一对应
第二步:找不同
第三步:判断不同字符的编码值
第四步:比较编码值的大小
应用:
1 判断是否是小写字母:'a'<= char <= 'z'
2 判断是否是大写字母:'A'<= char <= 'Z'
3 判断是否是中文:'\u4e00' <= char <= '\u9fa5'
注意:这里字母必须加单引号
print('abc' == 'abc') # True
print('abdcb' > 'abcde') # True
# 判断一个字符串中第三个字符是否是字母?
str3 = 'sdd34.erer'
char = str3[2] # 取出第三个字符
print('是否是字母', 'a' <= char <= 'z' or 'A' <= char <= 'Z')
print('是否是中文:', '\u4e00' <= char <= '\u9fa5')
3.in 和 not in 操作
a.字符串1 in 字符串2 -> 判断字符串2中是否包含字符串1
(判断字符串1是否是字符串2的子串)
b.字符串1 not in 字符串2 -> 判断字符串2中是否不包含字符串1
(判断字符串1是否不是字符串2的子串)
# in
print('zhi' in 'hzhi isd') # True
print('dfj' in 'ddddddd') # False
# not in
print('zhi' not in 'hzhi isd') # False
print('dfj' not in 'ddddddd') # True
4. len函数
用法:len(序列)
目的:获取序列的长度即获取序列中元素的个数
输入:序列
输出:数字(包括0)
注意:
一个转义字符:长度为1
一个编码字符:长度为1
一个空格:长度为1
一个tab键:长度为4
一个\t表示的tab键:长度为1
示例:
print(len('sdfd')) # 4
str1 = input('请输入:') # 123456
print(str1[len(str1)-1]) # 6
str2 = ' abc'
print(len(str2)) # 7
三、格式化字符串
1. 什么是格式字符串?
定义:字符串中通过格式占位符来代替字符串中变化的部分,然后在后面通过数据或者变量确定变化
语法:
包含占位符的字符串 % (每个占位符对应的变量)
包含占位符的字符串 % (值1, 值2, 值3....)
常见占位符:
%s (字符串)
%d (数字)
%f (小数) (%.nf 保留小数点后n位小数)
%c (字符) (可以将编码值转换成字符)
% - 固定写法
() - 固定写法
注:字符串中只有一个占位符的时候,这个()可以省略
值 - 个数和类型和位置一一对应,即值和占位符要一一对应
name = input('姓名:')
age = 18
sex = '男'
massage = '我叫%s,今年%d岁,性别:%s'
print(massage % (name, age, sex))
message = '我叫%s,今年%d, 性别:%s, \
月薪%f万' % (name, age, sex, 3.5)
print(message)
注:可以直接在print函数里面写,不用先保存在变量中
四、类型转换
1.基本语法
语法:
类型名(数据) - 将指定的数据转换成指定类型
说明:
类型名 - 任何python支持的,或者是自定的类型都可以
数据 - 需要转换的对象(类型不同要求可能不同)
2. 转换实例
int(数据) - 将其他数据转换成整型
float(数据) - 将其他数据转换成浮点型
bool(数据) - 将其他类型转换成布尔
str(数据) - 将其他数据转换成字符串
a.整型
print(int(12.8)) # 浮点数可以转换成整数,直接保留整数部分
b = int(True) # 1 布尔可以转换成整数,True->1, False->0
print(b)
c = int('120') # 只有去掉字符串的引号后本身就是
# 一个整数的字符串才能转换成整型
c = int('avd') # 报错
# ValueError: invalid literal for int() with base 10: 'avd'
# 值错误:以10为基数的int()的文本无效:'avd'
b. 浮点型
a = float(100) # 所有整数都可以转换成浮点数,在后面加.0
b = float(True) # 布尔转换成浮点数,True->1.0,False->0.0
c = float('12.5')
# 去掉引号后本身就是一个数字的字符串,能转换成浮点型
print(a, b, c)
c. 布尔类型
python中所有的数据都可以转换成布尔
注:所有为空为0的值会转换成False,其他都是True
a = bool(100)
b = bool(0.0)
c = bool('')
d = bool([])
f = bool(None)
print(a, b, c, d, f) # True False False False False
d. 字符串类型
所有的数据都可以转换成字符串,而且转化的时候就只是单纯的在外面加两个单引号
应用:字符串的拼接 字符串的运算
a = str(100)
print(type(100)) # <class 'str'>
五、内置函数
使用方法:字符串.方法名()
1 capitalize()
目的:将字符串的第一个字母变成大写,其他字母变小写
返回值:首字母大写,其他字母小写的新字符串
注意:首字符如果是非字母,首字母不会转换成大写,会转换成小写
# 注意:只有第一个字符是字母的时候才有效
str1 = 'ddfff'
print(str1.capitalize()) # Ddfff
str="123 hello PYTHON"
str.capitalize() # 123 hello python
2 字符串对齐方式
说明:
width:字符串长度(整数),下同
fillchar:填充符号(字符),只能是单个字符,下同
center(width, fillchar)
目的:居中ljust(width, fillchar)
目的:左对齐rjust(width, fillchar)
目的:右对齐
示例:
str1 = 'abc'
print(str1.center(7, '0')) # 00abc00
print(str1.ljust(7, '*')) # abc****
print(str1.rjust(7, '=')) # ====abc
注意:当fillchar长度小于字符串长度时,会直接返回字符串
fillchar默认是空格
3 count(str)
用法:字符串1.count(字符串2)
目的: 在字符串1中统计字符串2出现的次数
输入:两个字符串(可以传参开始和结束下标)
输出:数字
print('ddfjdkfdfkd'.count('d')) # 5
4 isalpha()
目的: 判断字符串中是否全是字母
注意:非ASCII码表中的字符检测不出来
print('dfdfdj'.isalpha()) # True
print('dfdfw1j'.isalpha()) # False
5 join(seq)
用法:字符串1.join(字符串2)
目的:将字符串1插入到字符串2中
输入:两个字符串
输出:一个新的字符串
注意:每个字符之间,最前后不会插入
new_str = '*'.join('dffkd')
print(new_str) # d*f*f*k*d
6 split
用法:字符串1.split(字符串2)
目的:以字符串2去切割字符串1
输入:两个字符串
输出:列表
应用:通过url获取图片的名字
print('12,34,34'.split(',')) # ['12', '34', '34']
url = "http://www.baidu.com/python/image/123456.jpg"
path =url.split("/")[-1]
print(path) # 123456.jpg
7 zfill(width)
目的:长度为 width ,原字符串右对齐,前面填充0
补充:zfill(width)效果等同于rjust(width, '0')
num = input('进班顺序(1~50):') # 12
id2 = 'py1809' + num.zfill(4)
print(id2) # py18090012
8 isdecimal()
目的:检查字符串是否只包含十进制字符
输出:布尔值
str1 = '123hnfd'
print('123errer'.isdecimal()) # False
print('12323'.isdecimal()) # True
9 upper()
目的:转换字符串中所有小写字母为大写
输出:新的字符串
print('djkdfd'.upper()) # DJKDFD
10 title()
目的:将多个单词的首字母转换成大写
输出:新的字符串
注意:非字母后的第一个字母转换成大写字母
print('mynameis'.title()) # Mynameis
print('my_name_is'.title()) # My_Name_Is
txt = "b2b2b2 3g3g3g"
x = txt.title()
print(x) # B2B2B2 3G3G3G
11 swapcase()
目的:将字母大写转小写 and 小写转大写
输出:新的字符串
说明:就是将字母取反
print('dfDFfdf'.swapcase()) # DFdfFDF
12 max(str)
目的:获取字符串 str 中最大的字母
输出:字符
注意:有大小写的字符串中返回的是小写字母的最大值
print(max('zheshi')) # z
print(max('Zheshi')) #s
13 min(str)
目的:获取字符串 str 中最小的字母
输出:字符
注意:有大小写的字符串中返回的是小写字母的最小值
print(min('znxjdsyeiw')) # d
print(min('Znxjdsyeiw')) #z
14 lower()
目的:转换字符串中所有大写为小写
输出:新的字符串
print('DFDFDKDFDdd'.lower()) # dfdfdkdfddd
15 istitle()
目的:如果字符串采用PEp8方式,但是单词首字母都是大写,返回 True,否则返回 False
输出:布尔值
print('dfjd_dfdjf'.istitle()) # False
print('My_Name'.istitle()) # True
16 isdigit()
目的:判断字符串是否只包含数字
输出:布尔值
print('dfdf343434'.isdigit()) # False
print('14343545454'.isdigit()) # True
17 isalnum()
目的:判断字符串至少有一个字符并且所有字符是否都是字母或数字
输出:布尔值
print(''.isalnum()) # False
print('ddffdff'.isalnum()) # True
print('123354'.isalnum()) # True
print('dfdf2434'.isalnum()) # True
18 isnumeric()
目的:判断字符串中是否只包含数字字符(中文数字也可以)
输出:布尔值
print('434838'.isnumeric()) # True
print('434fdfg'.isnumeric()) # False
19 isspace()
目的:判断字符串中是否为空白符(不是空串)
输出:布尔值
空白符:空格、制表符(\t)、换行(\n)、回车等(\r)
print(' '.isspace()) # True
print(''.isspace()) # False
print('dfdf'.isspace()) # False
20 lstrip([chars])
目的:截掉字符串左边的空格或指定字符。
输出:新的字符串
print(' dffdfd'.lstrip()) # dffdfd
21 islower()
目的:如果字符串中包含至少一个区分大小写的字符,判断所有这些(区分大小写的)字符是否都是小写
输出:布尔值
print('fdddfdfA'.islower()) # False
print('fdddfsdsf'.islower()) # True
22 isupper()
目的:如果字符串中包含至少一个区分大小写的字符,判断所有这些(区分大小写的)字符是否都是大写
输出:布尔值
print('fdddfsdsf'.isupper()) # False
print('DSDSDDSD'.isupper()) # True
23 rstrip([chars])
目的:删除字符串末尾的指定字符(默认为空格)
输出:新的字符串
demo = '我是一个例子:::'
demo_1 = ' 真巧,我也是例子 '
print(demo.rstrip(':')) # 我是一个例子
print(demo_1.rstrip()) # 真巧,我也是例子
24 strip([chars])
目的:移除字符串头尾指定的字符(默认为空格)或字符序列
输出:新的字符串
注意:只会删除两头,不会删中间
删除多个字符时:只要头尾有对应其中的某个字符即删除,不考虑顺序
str = "*****我是**一个**例子!!!*****"
print (str.strip('*')) # 我是**一个**例子!!!
# 字符序列
str = "12我也是一个例子21"
print (str.strip('12')) # 我也是一个例子
25 endswith(suffix[, start[, end]])
目的:判断字符串是否以指定后缀结尾
说明:
suffix: 字符串或者是一个元素。
start: 开始下标
end: 结束下标
输出:布尔值
注意:
start 参数以 0 为第一个字符索引值。
end 参数以 1 为第一个字符索引值。
Str = '哇塞,这是一个例子!!!'
suffix = '!!'
print(Str.endswith(suffix)) # True
print(Str.endswith(suffix, 9)) # True
suffix = 'run'
print(Str.endswith(suffix)) # False
print(Str.endswith(suffix, 0, 19)) # False
26 replace(old, new[, max])
目的:将旧字符串替换成新的字符串
说明:
old :将被替换的子字符串。
new : 新字符串,用于替换old子字符串。
max:可选字符串, 替换不超过 max 次
输出:新的字符串
demo = '哇塞,这是一个例子!!!'
print(demo) # 哇塞,这是一个例子!!!
print(demo.replace('哇塞', '是的')) # 是的,这是一个例子!!!