day6总结
1.什么是字符串
符串是Python内置的一种容器型数据类型,不可变,有序(支持下标操作);
将单引号或者双引号作为容器,里面可以根据情况放多个字符
不可变指的是内容的值和顺序不可变
有序:一旦字符串确定,字符串中字符的位置就固定(每个字符是第几个是确定的)
'asdjfj'
"中国计算机wqe211"
2.字符串的内容 - 字符
Python中只有字符的概念,没有字符对应的数据类型
字符串的基本单元就是字符,又叫字符串的元素
a.基本字符 - 数字,字母,常用符号,中文,日语,韩语等
'88089'
'jsjdjf'
'你好重富哦'
'123==-=-jjj'
b.转义字符 - 通过转义符号\后面跟不同的符号来表示特殊功能或者特殊意义的字符
\n - 换行 ' - 一个单引号 " - 一个双引号 \ - 一个反斜杠 \t - 制表符
str1 = '\tz"bh\n12\n345678'
print(str1)
阻止转义:在字符串的最前面加r/R,可以阻止字符串中的转义字符转义(一般用于正则表达式)
str2 = r'\tabc\n123x'y"z'
print(str2)
c.编码字符 - \u后面跟四位的16进制数,来表示一个字符,这个四位的16进制数对应的值是字符的编码值
0-9,a/A-f/F
str3 = 'abc + \u9fa5'
print(str3)
字符编码
Python中的字符采用的是Unicode编码
计算机存储数据的时候只能存数字,而且存的是数字的补码(是以二进制的格式进行存储)
100 # 十进制数
print('二进制:',0b1100100) #bin(数字) - 获取指定数字对应的二进制
print(bin(100))
print(oct(100),0o144) #otc(数字) - 获取指定数字对应的八进制
print(hex(100),0x64) #hex(数字) - 获取指定数字对应的十六进制
注:0b,0o,0x为前缀,分别指在python中以二进制,八进制,十六进制来看前缀后面的内容,可将后缀后的其他进制数字转换为十进制的数字
编码:每个字符在计算机中存储的时候都会对应一个固定且唯一的数字,这个数字就是这个字符的编码。
每一个字符和数字的一一对应关系就是编码表,常见的编码表有:ASCII码表和Unicode编码表。
ASCII码表中只对数字字符、字母字符、英文符号进行编码
Unicode编码表是对ASCII码表的扩充,能够对世界上所有的符号进行编码:4e00-9fa5(汉字范围)
chr(编码值) - 获取编码值对应的字符
print(chr(100))
print(chr(0xa000))
print(ord('余'),ord('婷'))
print(chr(20313),chr(23159))
num = 0
for code in range(0x4e00,0x9fa5):
print(chr(code), end=' ')
num +=1
if num % 20 == 0:
print()
print(num) #所有的中文字符
str3 = '\u4fff\u5faa\u00c8'
print(str3)
print(hex(200))
- 获取字符 - 取字符串内容
1.1 获取单个字符
'''
a.语法:字符串[下标] - 根据下标获取字符串中对应的字符,结果就是获取到的字符
b.说明:字符串 - 可以是字符串值,也可以是字符串变量,结果是字符串的表达式等都可以
[] - 固定写法
下标 - 又叫索引,一旦字符串确定,字符串中的每个字符都会对应一个下标,表示这个字符在字符串中的位置,
下表的范围是0开始到字符串的长度减1,0表示第一个,1表示第二个,以此类推。(通用的)
下标范围还可以是-1 ~ -字符串长度减1,-1表示倒数第一个
c.获取单个字符的时候下标不能越界
'''
str1 = 'py\nthon' # 'p':0/-6 'y':1/-5
result = 'python'[3]
print(result)
print(str1[0],str1[-6],str1[-1],str1[-2],str1[4])
#print(str1[100]) # IndexError: string index out of range
1.2 获取部分字符(字符串切片)
'''
a.语法:字符串[开始下标:结束下标:步长] - 从开始下标开始,获取到结束下标前为止,每次下标值增加步长;结果是字符串
b.说明:字符串 - 可以是字符串值,也可以是字符串变量,结果是字符串的表达式等都可以
[]: - 固定写法
开始下标,结束下标 - 下标值,开始下标对应的字符可以取到,结束下标对应的字符一定取不到
步长 - 整数,可以是正的也可以是负的
c.注意:下标可以越界
如果步长为正(从前往后获取),开始下标对应的字符要在结束下标对应的字符前才能获取到值
如果步长为负(从后往前获取),开始下标对应的字符要在结束下标对应的字符后面才能获取到值
'''
str2 = 'abcedf123456'
print(str2[0:4:1]) # abce
print(str2[-2:-10:-2]) # 531d
print(str2[0:100:1]) # 下标可以越界,'abcedf123456'
print('hello python'[1:-2:3]) # eoy
'''
切片语法中可以对步长,开始下标和结束下标进行省略:
1.省略步长(步长默认为1)
字符串[开始下标:结束下标] == 字符串[开始下标:结束下标:1]
2.省略开始下标
字符串[:结束下标:步长] - 如果步长是正,从字符串开头往后取;如果步长为负,从字符串最后一个字符往前取
字符串[开始下标::步长] - 如果步长为正,
'''
str2 = 'abcedf123456'
print(str2[2:5]) # ced
print(str2[-4:-1]) # 345
print(str2[:3:1]) # abc
print(str2[:3:-1]) # 654321fd
print(str2[2:]) # cedf123456
print(str2[2::-1]) # cba
print(str2[:]) # abcedf123456
print(str2[::-1]) # 654321fdecba
练习:1234 -> 4321
num = 1234
num_str = str(num)
new_num_str = num_str[::-1]
new_num = int(str(num)[::-1])
print(new_num * 10) #43210
1.3 遍历字符串 - 一个一个的取出所有字符;
'''
方法一:直接遍历
for 变量 in 字符串:
循环体
方法二:通过遍历下标,来遍历字符串
for 变量 in range(字符串长度):
字符串[变量]
'''
for char in 'hello':
print(char)
str3 = 'when i was young'
# len(字符串) - 获取字符串长度,返回一个数字。字符串长度指的是字符串中字符的个数
for index in range(len(str3)):
print(index,str3[index])
index = 0
while index < len(str3):
print(index, str3[index])
index += 1
字符串相关运算
a.数学运算:字符串支持加法运算和乘法运算
语法:字符串1 + 字符串2 - 将两个字符串拼接在一起产生一个新的字符串
new_str = 'abc' + '123'
print(new_str)
new_str += '你好'
print(new_str)
注意:加号两边必须都是数字或者都是字符串,数字和字符串不能混合相加!
new_str = '123' + 899 #TypeError: must be str, not int
语法:字符串 * 正整数/正整数 * 字符串 - 指定的字符串重复指定次数,产生一个新的字符串
print('abc' * 3) # abcabcabc
print('*' * 100)
b.比较运算:字符串支持所有的比较运算符
字符串1 == 字符串2 字符串1 != 字符串2 - 判断两个字符串是否相等
print('abc' == 'abc')
print('abc' != 'bda')
# 两个字符串比较大小:让两个字符串中相同位置的字符一一比较(从前往后),找到第一对不相等的字符,判断编码值的大小
print('abcde' > 'abz') # False
print('abc' > 'abc') # False
print('abc1' > 'abc') # True
应用:
判断一个字符是否是字母:'a' <= char <= 'z' or 'A' <= char <= 'Z'
判断一个字符是否是数字:'0' <= char <= '9'
判断一个字符是否为中文(4e00~9fa5):'\u4e00' <= char <= '\u9fa5' / 0x4e00 <= ord(char) <= 0x9fa5
print('\u4e00' <= '\u9fa5')
练习:输入一个任意的字符串,统计输入的内容中字母的个数
value = input('请输入一个字符串:')
count = 0
for char in value:
if 'a' <= char <= 'z' or 'A' <= char <= 'Z':
count += 1
print(count)
- in 和 not in 操作
字符串1 in 字符串2 - 判断字符串1是否在字符串2中(判断字符串2中是否包含字符串1)
字符串2 in 字符串1 - 判断字符串2是否在字符串1中(判断字符串1中是否包含字符串2)
print('abc' in '123abc--=') #True
print('abc' in 'a123bc===') #False
print('abc' not in 'a123bc===') #True
- 常用内置函数
len(字符串) - 求字符串长度
str(数据) - 将其他数据转换成字符串,所有的数据都能转换为字符串,转换的时候直接在数据的外面加引号
print(int('-23')) #只有去掉引号后,本身就是一个整数的字符串才能转换成整型
print(float('124')) #只有去掉引号后,本身就是一个数字的字符串才能转换为浮点型
print(bool('')) #除了空串会转换为False,其他的都会转换成True
str2 = ''
if str2:
print('不是空串')
- 字符串的对象方法
字符串.方法()
字符串.capitalize()
str4 = 'hello'
new_str = str4.capitalize() # 将字符串的第一个字符转换为大写
print(new_str)
# 字符串.center(width, fillchar) - 产生一个长度为width的新字符串,新字符串中原字符串居中,剩余的部分用fillchar填充
new_str = str4.center(11, '*')
print(new_str)
# 字符串.ljust(width,fillchar) - 返回一个原字符串左对齐,并使用 fillchar 填充至长度 width 的新字符串
new_str = str4.ljust(11,'=')
print(new_str)
# 字符串.rjust(width,fillchar) - 返回一个原字符串右对齐,并使用fillchar(默认空格)填充至长度 width 的新字符串
num = 1
num = 10
study_id = str(num).rjust(3, '0')
print(study_id)
# 字符串.zfill(width) - 产生一个宽度是width的字符串,原字符串在右边,前面0填充
study_id = str(num).zfill(10)
print(study_id)