Day3 字符串和字符串相关运算
一、获取字符
1、获取单个字符
字符串中的每一个字符都会对应一个唯一的下标(索引)用来表示字符在字符串中的位置。
下标的范围:
- 下标是从0开始依次增加的,0对应的第一个字符 (0 ~ 字符串长度 - 1)
- 下标是从-1开始依次减少的,-1对应的最后一个字符;( - 1 ~ 字符串长度)
str = 'hello'
# h对应下标0,e对应下标1,l对应下标2,l对应下标3,o对应下标4
# h对应下标-5,e对应下标-4,l对应下标-3,l对应下标-2,o对应下标-1
a、语法:
字符串[下标] # 获取字符串中指定下标对应的字符
b、说明:
字符串 - 只要结果是字符串的表达式都可以,例如:字符串字面量,字符串变量
[] - 固定写法
下标 - 需要获取的字符对应的下标;注意,这儿的下标不能越界
例1:
result = 'How are you!'[0] # 或取字符串How are you!下标为0的元素'H',并赋给变量result。
例2:
result = 'How are you!'
print(result[2])
例3:
result = 'How are you!'[-99]
print(result)
# 下标越界报错
# IndexError: string index out of range
2、获取部分字符(字符串切片)
方法一:
a、语法:
字符串[开始下标:结束下标:步长] # 从开始下标开始,到结束下标前为止(不含结束下标)。每次下标值加上步长去获取下一个
b、说明:
字符串 - 只要结果是字符串的表达式都可以,例如:字符串字面量,字符串变量
[] - 固定写法
开始下标、结束下标 - 下标值(这里可以越界)
步长 - 必须要求是整数(正数和负数都行),
如果步长为正数,是从开始下标开始从前往后获取;
如果步长为负数,是从开始下标开始从后往前获取。
c、注意:
当步长为正,要求开始下标对应的字符位置必须在结束下标对应的字符的位置的前面,否则结果是空串!
当步长为负,要求开始下标对应的字符位置必须在结束下标对应的字符的位置的后面,否则结果是空串!
不管怎么取,结束下标一定取不到。
例一:
str1 = 'Hello Python'
print(str1[0:4:1]) # Hell
print(str1[0:4:2]) # Hl
print(str1[0:4:-2]) # 输出空串
print(str1[0:-1:2]) # HloPto
print(str1[-1:0:-2]) # nhy le
print(str1[-1:-100:-1]) # 结束下标越界,倒序输出结果:nohtyP olleH
方法二:(省略步长)
语法:
字符串[开始下标:结束下标] # 从开始下标开始,到结束下标前为止(不含结束下标),省略步长,默认为1。
print('Good morning!'[2:5]) # od
方法三:(省略开始下标和结束下标)
a、省略开始下标
字符串[:结束下标:步长]
# 省略开始下标,当步长为正数时,从字符串的第一个字符(包含)开始取到结束下标前为止
# 省略开始下标,当步长为负数时,从字符串的最后一个字符开(包含)始取到结束下标前为止
str1 = '0123456789'
print(str1[:6]) # 012345
print(str1[:6:-1]) # 987
b、省略结束下标
字符串[开始下标::步长]
# 省略结束下标,当步长为正数时,从开始下标开始取到字符串最后一个字符(包含)为止
# 省略结束下标,当步长负正数时,从开始下标开始取到字符串第一个字符(包含)为止
str1 = '0123456789'
print(str1[2::]) # 23456789
print(str1[2::-1]) # 210
运用:让字符倒序输出
str1 = '0123456789'
print(str1[::]) # 0123456789
print(str1[::-1]) # 9876543210
二、字符串相关运算
1、支持的运算符
支持数学运算符+,*
支持比较运算符> ,<, ==, >= ,<= ,!=
Python中的字符串支持数学运算中的+和*,以及所有的比较运算符。
a、+
语法:字符串1 + 字符串2
说明:将字符串1和字符串2拼接在一起产生一个新的字符串。
注意:字符串不能和数字混合相加。
newstr = 'abc' + '123'
print(newstr) # abc123
b、*
语法:字符串*N
说明:N是正整数,实现N个字符串相加。
newstr = 'abc' * 3
print(newstr) # abcabcabc
c、比较是否相等
==, != 可以判断两个字符串是否相等或者不相等
print('abc' == 'abc') #True
print('abc' != 'abc') #False
d、比较大小
规则:从第一个字符开始依次往后找,到到第一个不相等的字符对,判断他们的编码值得大小,谁的编码值大,对应的字符串就大,不会往后比较了。
print('b' > 'a') #True
print('bc' > 'abc') #True
判断是否是小写字母:'a' <= char <= 'z'
判断是否是大写字母:'A' <= char <= 'Z'
判断是否是字母:'a' <= char <= 'z' or 'A' <= char <= 'Z'
判断是否是中文:'\u4e00' <= char <= '\u9fa5'
判断一个字符串中的第3个字符是否是字母
str1 = 'ququ3quququ'
char = str1[2]
print('是否是字母:', 'a' <= str1 <= 'z' or 'A' <= str1 <= 'Z')
2、in和not in操作
语法:
字符串1 in 字符串2
字符串1 not in 字符串2
说明:in判断字符串1是否在字符串2里面
not in判断字符串1是否不在字符串2里面
print('abc' in 'hello abc') # True
print('abc' in 'hello cba') # False
print('abc' not in 'hello cba') # True
3、len函数
语法:
len(序列)
说明;获取序列长度,获取序列中元素的个数。
len(字符串)
说明:获取字符串的长度。
运用:
获取用户输入的最后一个字符
str1 = input('请输入:')
last_char = str1[len(str1)-1]
print(last_char)
注意:
- 一个可以转义的字符的长度为1
- 一个编码字符的长度是1
- 一个空格字符的长度是1
- 手动在键盘上按一个tab,一般空格是4个空格,长度是4;一个\t来表示的tab,长度是1
三、格式字符串
1、什么是格式字符串
在字符串中通过格式占位符来代替字符串中变换的部分,然后通过数据或者变量确定变化
语法:
包含占位符的字符串 % (值1, 值2, 值3...)
说明:
占位符 | 说明 |
---|---|
%s | 字符串占位符 |
%d | 整数占位符 |
%f | 小数占位符 |
%c | 字符占位符(可以将数字转化成对应字符) |
%.Nf | 保留小数点后N位小数 |
% - 固定写法
() - 固定写法,字符串中只有一个占位符的时候这个括号可以省略
括号里面的值 - 值要和占位符位置和类型一一对应。
name = input('请输入名字:')
sex = input('请输入性别:')
message = '我叫%s,性别:%s 年龄%d岁'%(name, sex, 18)
输入一个字符串,用一个变量保存输入的字符串的相关信息:XXX的长度是XX,最后一个字符是X
例如:输入abc -> abc的长度是3,最后一个字符是c
str1 = input("请输入字符串:")
length = len(str1)
last_char = str1[-1]
message = '%s的长度是%d,最后一个字符是%c' % (str1, length, last_char)
print(message)
'''
请输入字符串:abcdef
abcdef的长度是6,最后一个字符是f
'''
四、类型转换
语法:
类型名(数据) - 将指定数据转换成指定类型,类型名是任何Python支持的,或者自定的类型都可以
数据 - 需要转换的对象(类型名不同要求不一样)。
举个例子:
age = input('年龄:')
print(type(age), age)
print('是否成年:', age >= 18)
说明:输入的age是字符串,字符串无法和整数比较,程序报错,需要类型转换。
类型转换 | 说明 |
---|---|
int(数据) | 将数据转换成整型 |
float(数据) | 将数据转换成浮点型 |
bool(数据) | 将数据转换成bool |
str(数据) | 将数据转换成字符串 |
1、int类型转换
支持小数,布尔值,部分字符串。
print(int(12.99)) # 12
print(int(True)) # 0
print(int('12')) # 12
print(int('-12')) # -12
print(int('12.4')) # ValueError
print(int('abc')) # ValueError
print(int('3e2')) # ValueError
注意:int()不是所有字符串都能转换成整数,只有去掉字符串的引号后本身就是一个整数的字符串才能转换成整数。
2、float()类型转换
print(float(10)) # 10.0
print(float(True)) # 1.0
print(float('-32')) # -32
print(float('3.14'))# 3.14
print(float('3e2')) #300.0
注意:float()不是所有字符串都能转换成整数,只有去掉字符串的引号后本身就是一个小数的字符串才能转换成整数。
3、bool()类型转换
都可以转换。所有为空位零的值都转换成False,其他都是True。
print(bool(2)) # True
print(bool(-3)) # True
print(bool(0)) # False
print(bool(3+1j)) # True
print(bool(3.14)) # True
print(bool(-0.14)) # True
print(bool(0.0)) # False
print(bool('False'))# True
print(bool(' ')) # True
print(bool('')) # False
print(bool(None)) # False
4、str()类型转换
Python中所有的数据都可以转换成字符串而且转换的时候就是单纯地在外面加引号。
五、字符串内建函数
字符串相关方法的使用方式都是:字符串.方法名()
1、字符串.capitalize()
将指定的字符串的第一个字符转换成大写字母,返回新的字符串
注意:只有第一个字符是字母的时候才有效。
str1 = 'abc'
print(str1.capitalize()) # Abc
2、字符串对齐
- 字符串.center(width, fillchar) - 居中,width决定新字符串长度,fillchar就是用来填充多出来的位置的字符
- 字符串.ljust(width, fillchar) - 左对齐
- 字符串.rjust(width, fillchar) - 右对齐
str1 = 'abc'
print(str1.center(10, '*')) # ***abc****
print(str1.ljust(10, '*')) # abc*******
print(str1.rjust(10, '*')) # *******abc
3、count
语法:字符串1.count(字符串2) - 在字符串1中统计字符串2出现的次数
print(str1.count('a')) # 1
4、join
字符串1.join(字符串2) - 将字符串1插入到字符串2中的每个字符之间
print("*".join('abc')) # a*b*c
5、split
字符串1.split(字符串2) - 以字符串2去切割字符串1,返回一个列表