一 字符串(str)
1 .什么是字符串(str)
字符串是python内置的一种容器型数据类型(序列),不可变,有序:
将单引号或者双引号作为容器,里面可以根据情况放多个字符
不可变:指的是内容的值和顺序不可变
有序:一旦字符串确定字符串中字符的位置就固定了(每个字符是第几个字符是确定的)
'ahs219'
"128*(数"
'hello'
2.字符串中的内容 - 字符
python 中只有字符的概念,没有字符对应的数据类型
字符串的基本单元就是字符,又叫字符串的元素
a,基本字符
#数字,字母,常用符号,中文,日语,韩语等
'a'
"ぁぃしてゐ"
b,转义字符
通过转义符号\后面跟不同的符号来表示特殊功能或特殊意义的字符
\n - 换行
'-一个单引号
" - 一个双引号
\ -一个反斜杠
\t 制表符一个缩进
加一个\ 可以实现多行
# str1 = 'abc' \
# 'abc'
# print(str1)
# str1 = 's\'bc\\n123n00'
- 阻止转义:
在字符串的最前面加R/r,可以阻止字符串中的转义字符转义(一般用于正则表达式)
# str2 = r'\tabc\n123x\'y\"z'
c.编码字符 - \u
\u 后面跟4位的16进制数,来表示一个字符.
这个4位的16进制数对应的值是字符的编码
# 0-9,A-F
str3 = 'abc+\u4dc0'
print(str3)
3.字符编码
- python 中的字符采用的是Unicode编码
- 计算机存数据的时候只能存数字,而且存的是数字的补码(是以二进制的格式进行存储的)
print('100 2进制', bin(100))
print('100 8进制', oct(100))
print('100 16进制', hex(100))
print(0b1100100 * 10)
编码:
每个字符在计算机存储的时候都会对应一个固定且唯一的数字,这个数字就是这个字符的编码
每一个字符和数字的一一对应关系就是编码表,
常见的编码表有:ASCII码表和Unicode编码表.
ascii 码表只对数字字符,字母字符,英文符号进行编码
Unicode 码表是对ascii码表的扩充,能够对世界上所有的符号进行编码
Unicode 中4e00到9fa5是中文
3.1chr(),ord():
- chr(编码值) :编码转字符
- ord(字符):字符转编码
- 注意 :字符就是长度为1的字符串
print(chr(0x4dc0)) # 编码转字符
print(chr(97))
print(ord('余'), ord('婷'))
二 字符串操作
1 获取字符 -取字符串的内容
1.1获取单个字符:
a.语法:字符串[下标] - 根据下标获取字符串中对应的字符
b.说明:
#字符串 - 可以是字符串,也可以是字符串变量,结果是字符串的表达式等都可以
#[] - 固定写法
#下标 - 又叫索引,一旦字符串确定,那么字符串中的每个字符都会对应一个下 表 示这个字符在字符串中的位置.
# 下标的范围是0开始到字符串长度减1 0表示第一个字符,1表示第二个,以此类推(通用的)
# 下标的 范围还可以是-1 - 字符串长度减1,-1表示倒数第一个
# str1 = 'python' # 'p' : 0/-6 'y' : 1/-5
# result = 'python'[3]
# print(result)
# print(str1[0],str1[-6],str1[-1],str1[4])
# print(str1[100])#IndexError: string index out of range
单个字符的下标不能越界
1.2获取部分字符(字符串切片)
a.语法: 字符串[开始下标:结束下标:步长]
从开始下标开始,获取到结束下标前为止,每次下标值增加步长
b.说明:
字符串 - 可以是字符串值,也可以是字符串变量,结果是字符串的表达式等都可以
# [] - 固定写法
# 开始下标,结束下标 - 下表值开始下标对应的字符可以取到,结束下标对应的字符一定取不到
# 步长 - 整数,可以正的也可以是负的
c.注意: 下标可以越界
- 如果步长为正(从前往后获取),开始下标对应的字符要在结束下标对应的字符前才能获取到值
- 如果步长为负(从后往前获取),开始下标对应的字符要在结束下标对应的字符的后面才能获取到值
str2 = 'abcdefg123456'
print(str2[0:4:1])
# print(str2[0:4:-1]) #下标错误取到的是空串
print(str2[4:0:-1])
print(str2[-2:-3:-1])
print(str2[0:1000:1]) #下标可以越界.'abcdefg123456'
print('hello python'[1:-2:3]) #'eoy'
1.3切片的语法中可以对步长,开始下标和结束进行省略
1.3.1省略步长
字符串[开始下标:结束下标] ==字符串[开始下标:结束下标:1]
str2 = 'abcdefg123456'
print(str2[2:5]) #cde
print(str2[-4:-1]) #345
1.3.2省略开始下标
字符串[:结束下标:步长]- 如果步长是正,从字符串开头往后取:如果步长为负,从字符串最后一个字符往前取
字符串[开始下标::步长]- 如果步长是正,取到最后一个字符为止:如果步长为负,取到第一个字符为止
str2 = 'abcdefg123456'
print(str2[:3:1]) #abc
print(str2[:3:-1]) #654321gfe
print(str2[2:]) #cdefg123456
print(str2[2::-1]) #cba
print(str2[::-1]) #倒叙
#1234 - 4321
num = 1234
num = int (str(num)[::-1])
print(num)
1.4 遍历字符串 - 一个一个的取出所有的字符
1.4.1方法1:变直遍历
# for 变量 in 字符串:
# 循环体
# for char in 'hello':
# print(char)
1.4.2方法2:通过遍历下标,来遍历字符串
str3 = 'when i was young'
for index in range(len(str3)):
print(index,str3[index])
index = 0
while index < len(str3):
print(index, str3[index])
index += 1
2 字符串相关运算
a 语法:
- 字符串正整数 / 正整数字符串 -指定的字符串重复次数,产生一个新的字符串
print('abc'* 3) #abcabcabc
print('*'* 10) #**********
b 比较运算:
- 字符串支持所有的比较运算符
字符串1 == 字符串2, 字符串1 != 字符串2 -判断两个字符串是否相等
print('abc' == 'abc')
print('abc' == 'acb')
print('abc' != 'abc')
- 两个字符串比较大小:让两个字符串中相同位置的字符一一比较(从前往后),找到第一对不相等的字符,判断编码值得大小
print('abcdef' > 'abz') # False
print('abc1' > 'abc') # True
c 应用
- 判断一个字符是否是字母: 'a' <=char <='z' or 'A' <=char <= 'Z'
- 判断一个字符是否是数字: '0' <= char <='9'
- 判断一个字符是否是中文: 0x4e00 <=ord(char)<=0x9fa5
#char = 'Z'
#判断一个字符是否是字母: 'a' <=char <='z' or 'A' <=char <= 'Z'
#判断一个字符是否是数字: '0' <= char <='9'
#判断一个字符是否是中文:
# '\u4e00'<=char<='\u9fa5'
# 0x4e00 <=ord(char)<=0x9fa5
# print('一'<=char<='龥')
print('\u4e00'<=char<='\u9fa5')
print(chr(0x4e00),chr(0x9fa5))
- 练习: 输入一个任意的字符串,统计输入的内容中字母的个数.例如:输入'abc123你好好结束end~~~~' 结果是:6
# str1 = input('请随便输入一段带字母的内容:')
# count = 0
# for char in str1:
# if 'a' <= char <= 'z' or 'A' <= char <= 'Z':
# count += 1
# print('字母的个数是:',count)
3. in 和 not in 操作
- 字符串1 in 字符串 2 - 判断字符串1 是否在字符串2中(判断字符串2中是否包含字符串1)
- 字符串1 not in 字符串2 - 判断字符串 是否不在字符串2中(判断字符串2中是否不包含字符串1)
# print('abc' in '123abc===') #True
# print('abc' in 'a123bc===') #False
# print('abc' not in 'a123bc===') #True
# print('@' in '12@3abc===') #True
4.常用内置函数len()
- len(字符串) -求字符串长度
- (数据) -将其他数据转换字符,所有数据都能转换成字符串,转换的时候直接在数据的外面加引号
print(int('+23'))# 字符串转整型,只有去掉引号后,本身就是一个整数的字符才能转换成整型
print(float('124.a'))#只有去掉引号后,本身就是一个数字的字符串才能转换成浮点型
print(bool('')) #除了空串会转换成False,其他的都会转换为True
5.字符串的对象方法 :字符串.方法
5.1字符串.capitalize() 将字符串中的首字母大写
str4 = 'hello'
new_str = str4.capitalize()
print(new_str)
5.2字符串center(width,fillchar) 居中
产生一个长度为width的新字符串,新字符串中原字符串居中,剩余部分用fillchar填充
new_str=str4.center(11,'1')
print(new_str)
new_str=str4.center(11,'*')
print(new_str)
5.3字符串.ljust(width,fillchar) 左对齐
new_str=str4.ljust(11,'=')
print(new_str)
5.4字符串.rjust(width,fillchar) 左对齐
new_str=str4.rjust(3,'0')
print(new_str)
num = 1
5.5字符串.zfill(width) 数字自动补齐
study_id = str(num).zfill(4)
print(study_id)