day 07 字符串
Date:2019.4.22
内容纲要:
一、字符串
1.什么是字符串(str)
1)字符串是python提供的容器型数据类型(序列),不可变、有序不可变 - 不支持增删改;有序 - 支持下标操作
2)python中的字符串使用单引号或者双引号引起来的字符集,引号里面的每一个基本单元叫字符
# 容器型数据类型
str1 = 'hello'
strl = 'aello'
2.字符
python中只有字符概念,没有字符类型
1)普通字符:数字、字母、普通符号、中文、日语、等
str2 = 'a'
print(type(str2), str2)
2)转义字符:
在特定的符号前加''来表示是特殊功能或者特殊意义的字符
- \n - 换行(相当于回车)
- \ ' - 单引号字符(不是字符串开头、结尾的标志)
- \ " - 双引号字符(不是字符串开头、结尾的标志)
- \ \ - 反斜杠本身(让一个反斜杠失去转义的功能)
- \t - 制表符(相当于tab)
str3 = '\t12\'3\na\"bc\\none'
print(str3)
阻止转义:在字符串的最前面加r或者R,能够阻止字符中所有的转义字符转义。
str4 = R'\thow\nare\nyou'
print(str4)
3)编码字符:在字符串中\u四位十六进制数,来表示一个字符
# \u字符编码值的16进制数
str5 = '123\u4e11'
print(str5)
3.1)字符编码:
字符在计算机里存储的值,计算机本身只有只有存储数字的额能力(存数字的二进制的补码),为了能够存储数字以外的符号,开发人员给每个字符对应一个固定的数字,用来对字符进行存储,每个字符对应的固定的数字就是字符的编码值。每个字符和数字的一一对应关系就是字符编码表,常见的编码表有:ASCII码表、Unicode编码表
ASCII码表采用一个字节对字符进行的编码:0-127
unicode编码表采用两个字节对字符进行编码,包含了ASCII码
chr函数:chr(编码值) - 获取编码值对应的字符
ord函数:ord(字符)- 获取制定字符对应的编码
print(chr(100), chr(0x5e00))
print(ord('李'), ord('卓'), ord('然'))
练习:查看日语的所有片假名
for code in range(0x30a0, 0x30ff):
print(chr(code))
3.字符串操作:查
1)获取单个字符
语法:字符串[下标] - 获取制定下标对应的字符
说明:
- 字符串 - 结果是字符串的表达式(字符串值、字符串变量、运算结果是字符串)
- [] - 固定写法
-
下标 - 又叫索引,值是整数,字符串确定后,字符串中的每一个字符都有一个确定的下标(索引)表示这个字符在字符串中的位置,python中下标有两种,位置从前往是0~字符串长度-1,位置从后
往前是-1~-字符串长度
【注】:获取单个字符的时候下标不能越界
str6 = 'hello'
print(str6[0]) # h
print(str6[-1]) # o
str7 = '\tabc 123'
print(str7[2], str7[5])
# print(str2[100]) 会报错:string index out of range(下标越界)
2)获取部分字符(字符串切片)
语法:字符串[开始下标:结束下标:步长]
从开始下标获取,每次增加步长取下一个值,取到结束下标为止(结束下标的值取不到)
说明:
- 字符串* - 结果是字符串的表达式(字符串值、字符串标量、运算结果是字符串)
- [] - 固定写法
- 开始下标 - 下标,整数。能取到对应的字符
- 结束下标 - 下标,整数。对应的字符无法取到
- 步长 - 整数。如果步长是整数,从前往后取;如果步长是负数,从后往前取
【注】:
- 字符串切片的结果,都是字符串
- 如果步长是正数,那么开始下标对应的字符要在结束下标对应的字符前面,才能取到值;如果步长是负数,那么开始下标对应的字符要在结束下标对应的字符后面,才能取到值
- 切片的时候下标可以越界
str8 = 'abc+123'
print(str8[0:3:1]) # abc
print(str8[2:-2:1]) # c+1
print('结果:', str8[2:-2:-1]) # 空串
print(str8[0:-1:1]) # abc+12
print(str8[-1:2:-1]) # 321+
print(str8[-1:1:-2]) # 31c
print(str8[2:100:1]) # c+123
3)获取部分字符的简写
- 省略步长 - 步长为1
语法:字符串[开始下标:结束下标] <--> 字符串[开始下标:结束下标:1] - 省略开始下标 - 步长为正从字符串开头往后获取,步长为负从字符串最后往前获取
语法:字符串[:结束下标:步长(等于1时可省略)]
str9 = 'hello world'
print(str9[3:-2]) # lo wor
print(str9[:5]) # hello
print(str9[:5:-1]) # dlrow
- 省略结束下标 - 步长为正,从开始下标取到字符串结尾,步长为负,从结尾取到第一个字符为止
语法:字符串[开始下标::步长(步长为1可省略)]
str_1 = 'hello world'
print(str_1[1:]) # ello world
print(str_1[1::-1]) # eh
print(str_1[:]) # hello world
print(str_1[::-1]) # dlrow olleh 字符串倒序
4)遍历字符串 - 将字符串中的字符一个一个的取出来
for 变量 in 字符串:
循环体
# 直接遍历,变量取到的就是字符
for char in str_1:
print(char)
print('===========================')
# 间接遍历,通过遍历下标遍历字符
for index in range(11):
print(str_1[index])
for index in range(-1, -11, -1):
print(index, str_1[index])
练习:统计输入的字符串中字母a出现的次数
# 例如:输入'how,are you! fine,thanks. and you'
word = input('请输入字符串:')
count = 0
for char in word:
if char == 'a':
count += 1
print(count)
二、字符串的相关操作
1.字符串的运算:
1)数学运算符:+,*
# + :两个字符串相加 -->将两个字符串拼接产生一个字符串
str1 = 'abc' + 'hello'
print(str1)
# *:字符串*正整数或者正整数*字符串:字符串重复制定次数产生一个新的字符串
str2 = 'abc' * 3
print(str2)
2)比较运算:>, <, >=, <=, ==, !=
# 针对两个字符串进行比较
str3 = 'abc'
print('abc' == str3)
# 字符串比较大小:按位置从前往后一对一对的比较,找出第一对不相等的字符,比较编码值。
print('abcdef' > 'az')
应用:
判断一个字符是否是小写字母:'a' <= char <= 'z'
判断一个字符是否是大写字母:'A' <= char <= 'Z'
判断一个字符是否是字母:'a' <= char <= 'z’ or 'a' <= char <= 'z‘
判断一个字符是否是数字字符:'0' <= char <= '0
判断一个字符是否是中文(4e00-9fa5):'\ue400' <= char <= '\u9fa5' or '一' <= char <= '龥'
练习:统计一个字符串中的大写字母个数
value = input('请输入字符串')
count = 0
for char in value:
if 'A' <= char <= 'Z':
count += 1
print(count)
3)赋值运算:=,+=,*=
str5 = '你好'
str5 += 'hello'
print(str5)
str5 *= 2
print(str5)
2.in 和not in
字符串1 in 字符串2 - 判断字符串2中是否包含字符串1
print('abc' in '123abc') # True
print('abc'in '123ab1c') # False
print('A'in 'hell A') # True
print('A' not in 'hello A') # False
3.len
len(字符串) - 获取字符串长度(字符串中字符的个数
print(len('abc'))
print(len('\tabc'))
str6 = ' abc'
print(len(str6))
print(len('\u4e00abc'))
for index in range(len('husjssas')):
print(index)
4.str
str(数据) - 将其他类型数据转换成字符串
所有类型的数据都可以转换成字符串;转换的时候直接数据外面加引号
print(str(100))
print(str(12.5))
print(str(True))
5.格式字符串:在字符串中用格式占位符代替字符串中变化的部分,然后再使用数据对变化的部分进行赋值
语法:包含格式占位符的字符串%(数据1,数据2,...)
【注】:数据的个数和类型要和前面字符串中格式占位的个数和类型保持一致
格式占位符:
- %s - 字符串
- %d - 整数
- %.Nf - 浮点数 - (N控制小数后小数的位数)
- %c - 字符、字符对应的编码值
name = input('姓名')
age = int(input('请输入年龄'))
money = 3.5
# message = '我今年xx岁'
message = '我是' + name + ',我今年' + str(age) + '岁'
message1 = '我是%s,今年%d岁,薪资:%.1fk' % (name, age, money)
print(message1)
附:字符的对象方法
Python 的字符串常用内建函数如下:
序号 | 方法 | 描述 |
---|---|---|
1 | capitalize() | 将字符串的第一个字符转换为大写 |
2 | center(width, fillchar) | 返回一个指定的宽度 width 居中的字符串,fillchar 为填充的字符,默认为空格。 |
3 | count(str) | 返回 str 在 string 里面出现的次数 |
4 | bytes.decode(encoding="utf-8", errors="strict") | Python3 中没有 decode 方法,但我们可以使用 bytes 对象的 decode() 方法来解码给定的 bytes 对象,这个 bytes 对象可以由 str.encode() 来编码返回。 |
5 | encode(encoding='UTF-8',errors='strict') | 以 encoding 指定的编码格式编码字符串,如果出错默认报一个ValueError 的异常,除非 errors 指定的是'ignore'或者'replace' |
6 | endswith(suffix) | 检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False. |
7 | expandtabs(tabsize=8) | 把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8 。 |
8 | find(str, beg=0 end=len(string)) | 检测 str 是否包含在字符串中,如果指定范围 beg 和 end ,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回-1 |
9 | index(str, beg=0, end=len(string)) | 跟find()方法一样,只不过如果str不在字符串中会报一个异常. |
10 | isalnum() | 如果字符串至少有一个字符并且所有字符都是字母或数字则返 回 True,否则返回 False |
11 | isalpha() | 如果字符串至少有一个字符并且所有字符都是字母则返回 True, 否则返回 False |
12 | isdigit() | 如果字符串只包含数字则返回 True 否则返回 False.. |
13 | islower() | 如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False |
14 | isnumeric() | 如果字符串中只包含数字字符,则返回 True,否则返回 False(中文数字也可以) |
15 | isspace() | 如果字符串中只包含空白,则返回 True,否则返回 False. |
16 | istitle() | 如果字符串是标题化的(见 title())则返回 True,否则返回 False |
17 | isupper() | 如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False |
18 | join(seq) | 以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串 |
19 | len(string) | 返回字符串长度 |
20 | ljust(width[, fillchar]) | 返回一个原字符串左对齐,并使用 fillchar 填充至长度 width 的新字符串,fillchar 默认为空格。 |
21 | lower() | 转换字符串中所有大写字符为小写. |
22 | lstrip() | 截掉字符串左边的空格或指定字符。 |
23 | maketrans() | 创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。 |
24 | max(str) | 返回字符串 str 中最大的字母。 |
25 | min(str) | 返回字符串 str 中最小的字母。 |
26 | replace(old, new [, max]) | 把 将字符串中的 str1 替换成 str2,如果 max 指定,则替换不超过 max 次。 |
27 | rfind(str, beg=0,end=len(string)) | 类似于 find()函数,不过是从右边开始查找. |
28 | rindex( str, beg=0, end=len(string)) | 类似于 index(),不过是从右边开始. |
29 | rjust(width,[, fillchar]) | 返回一个原字符串右对齐,并使用fillchar(默认空格)填充至长度 width 的新字符串 |
30 | rstrip() | 删除字符串字符串末尾的空格. |
31 | split(str="", num=string.count(str)) | num=string.count(str)) 以 str 为分隔符截取字符串,如果 num 有指定值,则仅截取 num 个子字符串 |
32 | splitlines([keepends]) | 按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。 |
33 | startswith(str, beg=0,end=len(string)) | 检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查。 |
34 | strip([chars]) | 在字符串上执行 lstrip()和 rstrip() |
35 | swapcase() | 将字符串中大写转换为小写,小写转换为大写 |
36 | title() | 返回"标题化"的字符串,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle()) |
37 | translate(table, deletechars="") | 根据 str 给出的表(包含 256 个字符)转换 string 的字符, 要过滤掉的字符放到 deletechars 参数中 |
38 | upper() | 转换字符串中的小写字母为大写 |
39 | zfill (width) | 返回长度为 width 的字符串,原字符串右对齐,前面填充0 |
40 | isdecimal() | 检查字符串是否只包含十进制字符,如果是返回 true,否则返回 false。 |
字符串.函数名()
1.capitalize() - 将字符串中的第一个字符转换成大写字母
str7 = 'abc'
print(str7.capitalize())
2.设置对齐方式
字符串.center(width, fillchar) - 让字符串在新字符串中居中,width控制新子串的宽度,fillchar是填充字符
- 字符串.ljust(width,fillchar)
- 字符串.rjust(width,fillchar)
- 字符串.zfill(width) <==>字符串.rjust(width, '0')
str8 = 'abc'
print(str8.center(7, '+'))
print(str8.ljust(7, '%'))
print(str8.rjust(7, '='))