"""秃子养成记"""
1.什么是字符串
字符串是Python内置的一种容器型数据类型,不可变、有序;
将单引号或者双引号作为容器,里面可以根据情况放多个字符
不可变:指的是内容的值和顺序不可变
有序:一旦字符串确定,字符串中字符的位置固定(每个字符是第几个字符是确定的)
2.字符串中的内容 - 字符
Python中只有字符的概念,没有字符对应的数据类型
字符串的基本单元就是字符,又叫字符串的元素
a.基本字符 - 数字、字母、常用符号、中文等
b.转义字符 - 通过转义符号\后面跟不同的符号来表示特殊功能或者特殊意义的字符
\n - 换行
' - 一个单引号
" - 一个双引号
\ - 一个反斜杠
\t - 制表符
阻止转义:在字符串的最前面加r/R,可以阻止字符串的转义字符转义(一般用于正则表达式)
c.编码字符 - \u后面跟四位的十六进制数,来表示一个字符。这个四位的十六进制数对应的值是字符的编码值
0-9,a/A-f/F
print('werwq+\u4f33')
3.字符编码
Python中的字符采用的是Unicode编码
计算机存储数据的时候只能存数字,而且存的是数字的补码(是以二进制的格式进行存储)
100 # 十进制数
print(bin(100)) # bin(数字) - 获取指定数字对应的二进制
print(0b1100100)
print(oct(100)) # oct(数字) - 获取指定数字的八进制
print(0o144)
print(hex(100)) # hex(数字) - 获取指定数字的十六进制
print(0x64)
编码:每个字符在计算机存储的时候都会对应一个固定且唯一的数字,这个数字就是这个字符的编码。
每个字符和数字的一一对应关系就是编码表,常见的编码表有:ASCII表和Unicode编码表
ASCII码表只对数字字符、字母字符、英文符号进行编码
Unicode编码表是对ASCII的扩充,能够对世界上所有的符号进行编码:4e00-9fa5
chr(编码值) - 获取编码值对应的字符
ord(字符) - 获取字符对应的编码值
print(chr(37041),chr(40092))
print(ord('邱'),ord('鲜'))
# for code in range(0x4e00,0x9fa5):
# print(chr(code),end=',') # 获取所有的汉字
1.获取字符 - 取字符串内容
a.获取单个字符
"""
a.语法:字符串[下标] - 根据下表获取字符串中对应的字符,结果是获取到的字符
b.说明:字符串 - 可以是字符串值,也可以是字符串是变量,结果是字符串的表达式都可以
[] - 固定写法
下标 - 又叫索引,一旦字符串确定,那么字符串中的每个字符都会对应一个下标
表示这个字符在字符串中的位置。下标的范围是0~到字符串长度减1
0表示第一个,1表示第二个,以此类推。(通用的)
下标范围还可以是-1到-字符串长度减1,-1表示倒数第一个
c.注意:获取单个字符的时候下标不能越界
"""
1.2获取部分字符(字符串切片)
"""
a.语法:字符串[开始下标:结束下标:步长] - 从开始下标开始,获取到结束下标为止
b.说明:可以是字符串值,也可以是字符串是变量,结果是字符串的表达式都可以
[],: - 固定写法
开始下标、结束下标 - 下标值、开始下标可以取到,结束下标对应的字符一定取不到
步长 - 整数,可以使正也可以是负
c.注意:下标可以越界
如果步长为正(从前往后取),开始下标对应的字符要在结束下标对应的字符前才能获取到值
如果步长为负(从后往前取),开始下标对应的字符要在结束下标对应字符的后面才能获取到值
"""
"""
切片的语法可以对步长、开始下标和结束下标进行省略
1.省略步长(步长默认为1)
字符串[开始下标:结束下标] == 字符串[开始下标:结束下标:1]
2.省略开始下标
字符串[:结束下标:步长] - 如果不出为正,从字符串开头往后取:如果步长为负,从字符串最后一个字符串往前取
字符串[开始下标::步长] - 如果步长为正,取到最后一个字符为止;如果步长为负,取到第一个字符为止
"""
1.3 遍历字符串 - 一个一个的取出所有的字符
"""
方法1:直接遍历
for 变量 in 字符串:
循环体
方法2:通过遍历下标,来遍历字符串
for 下标 range(字符串长度):
字符串[下标]
"""
for char in '2345678wety':
print(char)
str3='erwfwsfawet2345r23'
for index in range(len(str3)):
print('================',str3[index])
字符串相关运算
a.数学运算:字符串支持加法运算和乘法运算
语法:字符串1 + 字符串2 - 将两个字符串拼接在一起产生一个新的字符串
注意:加号两边,必须都是数字。或者都是字符串,数字和字符串不能混合相加!
语法:字符串 * 正整数 / 正整数 * 字符串 - 指定的字符串重复指定次数,产生一个新的字符串
b.比较运算:字符串支持所有的比较运算
字符串1 == 字符串2,字符串1 != 字符串2 - 判断两个字符串是否相等
两个字符串比较大小:让两个字符串相同位置的字符一一比较,找到第一对儿不相等的字符,判断编码值的大小
应用:
判断一个字符是否字母:'a'<=char<'z' or 'A'<=char<='Z'
判断一个字符是否是数字:'0'<=char<='9'
判断一个字符是否是中文(4e00~9fa5):\u4e00<=char<=\u9fa5 或者 0x4e00<=ord(char)<=0x9fa5
练习:输入一个任意字符串,统计输入内容中字母的个数
num1=input('请输入:')
a=0
for char in range(len(num1)):
if'a' <= num1[char] < 'z' or 'A' <= num1[char] <= 'Z':
a += 1
print('字母个数是:%d'% a)
3.in h和 not in 操作
字符串1 in 字符串2 - 判断字符串1是否在字符串2中(判断字符串2是否包含字符串1)
字符串1 not in 字符串2 - 判断字符串1是否不在字符串2中(判断字符串2是否不包含字符串1)
print('abc' in 'abcdeawer') # Ture
print('abc' not in 'abcwewfdwe') # False
4.常用内置函数
len(字符串) - 求字符串长度
str(数据) - 将其他数据转换成字符串,所有的数据都能转成字符串,转换的时候直接在数据的外面加引号
print(int('+3423')) # 只有去掉引号后,本身就是一个整数的字符串才能转换成整数
print(float('234.3')) # 只有去掉引号后,本身就是一个数字的字符串才能转换成浮点型
print(bool('wert')) # 除了空串会转换成False,其他都会转换成True
list1=['this','is','a','list']
print(str)
1.capitalize() 将字符串的第一个字符转换为大写
print(str.capitalize())#首字母大写
2.title()返回"标题化"的字符串,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle())
print(str.title())#首字母大写,按空格算进行分割
- lower()/upper()转换字符串中所有大写/小写字符转换为小写/大写.
print(str.lower())#转换为小写
print(str.upper())#转换为大写
4.center(width, fillchar)返回一个指定的宽度 width 居中的字符串,fillchar 为填充的字符,默认为空格。
print(str.center(50,'*'))
5.ljust(width[, fillchar])返回一个原字符串左对齐,并使用 fillchar 填充至长度 width 的新字符串,fillchar 默认为空格。
print(str.ljust(50,'*'))
6.rrjust(width, [, fillchar]) 返回一个原字符串右对齐, 并使用fillchar(默认空格)填充至长度
width的新字符串
print(str.rjust(50,'*'))
- endswith(suffix)检查字符串是否以 obj 结束,
如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False.
print(str.endswith('ED'))
8.startswith(str, beg=0,end=len(string))检查字符串是否是以 obj 开头,是则返回 True,
否则返回 False。如果beg 和 end 指定值,则在指定范围内检查。
print(str.startswith('One'))
- expandtabs(tabsize=8)把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8
print('\tgs'.expandtabs(1))**注意:此处的tab是指tab符号,而不是tab键打出来的效果
10.find(str, beg=0 end=len(string)) 则检查是否包含在指定范围内,如果包含返回开始的索引值(下标),否则返回-1
print(str.find('ou'))
11.rfind(str, beg=0,end=len(string))类似于 find()函数,不过是从右边开始查找.
print(str.rfind('you'))
- index(str, beg=0, end=len(string))跟find()方法一样,只不过如果str不在字符串中会报一个异常,即返回0.
print(str.index('ou'))
13.rindex( str, beg=0, end=len(string))类似于 index(),不过是从右边开始.
print(str.rindex('you'))
- isalnum()如果字符串至少有一个字符并且所有字符都是字母或数字则返 回 True,否则返回 False
print(str.isalnum())
- isalpha()如果字符串至少有一个字符并且所有字符都是字母则返回 True, 否则返回 False
print(str.isalpha())
16.isdigit()如果字符串只包含数字则返回 True 否则返回 False..
print(str.isdigit())
- islower()如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False
print(str.islower())
18.isdecimal()检查字符串是否只包含十进制字符,如果是返回 true,否则返回 false。
print('213'.isdecimal())
- isnumeric()如果字符串中只包含数字字符,则返回 True,否则返回 False(中文数字也可以)
print(str.isnumeric())
- isspace()如果字符串中只包含空白,则返回 True,否则返回 False.
print(str.isspace())
21.istitle()如果字符串是标题化的(见 title())则返回 True,否则返回 False
print(str.istitle())
22.isupper()如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False
print(str.isupper())
23.join(seq)以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
print('*'.join(str))
- len(string) 返回字符串长度
print(len(str))
- lstrip()截掉字符串左边的空格或指定字符。
print(str.lstrip('O'))
- rstrip()删除字符串字符串末尾的空格.
print(str.rstrip())
- strip([chars])在字符串上执行 lstrip()和 rstrip()
print(str.strip())
- max(str)min(str)返回字符串 str 中最大/最小的字母。
print(max(str))
print(min(str))
- replace(old, new [, max])把 将字符串中的 str1 替换成 str2,如果 max 指定,则替换不超过 max 次。
print(str.replace('you','I',3))
30.split(str="", num=string.count(str))num=string.count(str)) 以 str 为分隔符截取字符串,如果 num 有指定值,则仅截取 num 个子字符串
print(str.split('e',2))
‘e'分隔的符号,2'的含义为将原序列分割为3个部分,为1是割分为两部分,此处可以省略,省略则表示见‘e’就分割
31 splitlines([keepends])按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,
如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。
str2='we\rare\r\nfamily\n'
print(str2.splitlines())
print(str2.splitlines(True))
32.swapcase()将字符串中大写转换为小写,小写转换为大写
print(str.swapcase())#大小写互换
33.zfill (width)返回长度为 width 的字符串,原字符串右对齐,前面填充0
print(str.zfill(50))