第一章 1.8 数据类型之字符串

一、字符串

  • 字符串(str)是容器型数据类型,他是将单引号('')、双引号("")、三个单引号或三个双引号(''' '''/""" """)作为容器标志
  • 字符串有不可变性(不支持增删改)、有序性(支持下标操作)

1、字符串的元素 ---字符

python中只有字符概念,没有字符类型。引号中只有一个元素的字符串可以看成一个字符;字符串又叫字符集。

1)、字符

原则上任何可以通过键盘输入或者从其他地方复制粘贴的所有符号都可以作为字符

2)、普通字符

在字符串中能够代表符号本身的字符(没有特殊意义和特殊功能的符号)

3)、转义字符

在字符串中有特殊意义和特殊功能的字符的组合,一般是以斜杠\开头的
常见的转义字符:
\n ------> 表示换行
\t ------> 表示一个缩进(Tab)
\ ------> 表示斜杠本身
' ------> 表示单引号
" ------> 表示双引号
\u四位16进制数 ------> 编码字符(获取四位16进制数作为编码值对应的值)
所有的转义字符长度都是1

4)、阻止转义

在字符串最前面加r/R可以让当前字符串中所有的转义字符失效(所有的符号在字符串中都表示这个符号本身)

str6 = '\tsd\n\'ds123'
str7 = r'\tsd\n\'ds123'

2、字符编码

1)、计算机不能直接存储符号,只能存储数字,为了能够存储字符,把每个字符关联了一个固定的数字(这个固定的数字就是对应字符的编码)
2)、ASCII表在计算机中采用一个字节保存一个字符(128个字符),字符包含了所有的字母、数字和英文常用符号

  0-9:编码值依次增加 ; 0对应48
  A-Z:编码值以此增加 ; A对应65
  a-z:编码值依次增加 ; a对应97

3)、Unicode编码表是ASCII表的扩展,包含了世界上所有国家所有语言对应的符号(总共有65536个符号)

  ASCII表范围:0 - 127
中文的编码范围:4e00 - 9fa5

方法:

①:编码字符:\u4位16进制数
②:chr(编码值(可以是任何进制)) - 获取编码值对应的字符
③:ord(字符) - 获取指定字符对应的编码值

#获取所有的中文字符
num = 0
for x in range(0x4e00, 0x9fa5):
  print(chr(x))
  if num % 35 == 0:
    print()


二、字符串的查(字符串有不可变性(不支持增删改))

1、获取单个字符:字符串[下标]

一个空格是一个字符;tab键是4个字符;\t是一个字符

2、获取多个字符:切片---字符串[开始下标:结束下标:步长]
3、遍历:遍历元素,遍历下标
str1 = 'hello python'
print(str1[-4])
print(str1[5])
print(str1[2:])
print(str1[:-2:])


三、字符串的运算和函数

1、运算符

1)、加 +, 乘 *
2)、等 ==, 不等 !=
3)、>, <, >=, <=

字符串比较大小是比较编码值的大小,一个字符一个字符的比较
判断字符是否是小写字母:'a'<= char <='z'
判断字符是否是大写字母:'A'<= char <='Z'
判断字符是否是字母:'A'<= char <='Z' or 'a'<= char <='z'
判断字符是否是中文:'\u4e00' <= char <= '\u9fa5'
判断字符是否是数字:'0' <= char <= '9'

# 练习:输入一个字符串,判断这个字符串是否是中文字符串(全是中文)
value = input('请输入:')
for char in value:
    if not '\u4e00 <= char <=\u9fa5':
        print('不是中文字符串')
        break
else:
    print('是中文字符串')

2、in 和 not in

字符串1 in 字符串2 -> 判断字符串2中是否包含字符串1
print('a' in 'abcdf')
print('abc' in 'abcdf') 子串必须是连续的

3、相关函数

①、len(字符串)
print(len('\tsdse\ndsdwds\u4e00'))
②、str(数据)
print(list(str([10,20,30])))
③、sorted(字符串) 从小到大排序
str1 = 'python'
print(sorted(str1))
④、reversed(字符串)倒序



四、格式字符串

1、格式占位符

1)、语法:包含格式占位符的字符串 % (值1,值2,值3,...)
2)、说明:

% - 固定写法
() - 若值只有一个,可省略
值 - 任何有结果的表达式,值得个数和类型要与前面的占位符的个数和类型相同

格式占位符 - 格式占位符使用的时候和字符串中变化的数据类型相关

  •  %s - 字符串(任何类型都可以)
  •  %d - 整型;
  •  %-Nd - 整型;N约束数字的长度,如果不够,空格来凑(后面)。如果超了,不能约束
  •  %-Nd - 整型;N约束数字的长度,如果不够,空格来凑(前面)。如果超了,不能约束
  •  %f - 浮点数;小数点后保留6位
  •  %.Nf - 浮点数;N约束小数点的位数
name = input('请输入姓名:')
age = int(input('请输入年纪:'))
print('你好,我是'+ name +'今年',str(age)+'岁')
print('你好,我是%s,今年%d,工资%s' % (name, age, 200))

2、format

1)、语法:一个带有{}的字符串.format(值1,值2,...)
2)、用法:

①、大括号的个数和后面的数值个数一样
print('我是{},今年{}岁'.format('安', 20))
②、{N} - N从0开始以此增加、分别表示format中第0个值,第一个值。。。
print('我是{0},年纪是{1},今年{1}岁'.format('安', 20))
print('数据1:{1},数据2:{0},数据3:{1},'.format(10, 20))
③、[key]
'{key1},{key1}'.format(key1=值1,key2=值2)
print('我是{name},年纪是{age},今年{age}岁'.format(name='安', age=20))
④、用列表给占位符赋值
list1 = [10, 20, 30, 40]
print('{0[3]}, {0[2]}, {0[1]}'.format(list1))
⑤、用字典给占位符赋值
student = {'name': '小明', 'age':20, 'id': '001', 'score':100}
print('{name}今年{age}岁,学号:{id},考了{score}'.format(**student))
⑥、其他写法
print('圆周率:{:.2f}'.format(3.141592654))
- 约束宽度
print('整数:{:0>4d}'.format(25))
print('整数:{:+>4d}'.format(26))
print('整数:{:-<4d}'.format(27))
- 数字分隔
print('大整数:{:,}'.format(10000000000))
- 百分比
print('百分比:{:.1%}'.format(0.2))



五、字符串的相关操作

1、字符串.capitalize() - 将字符串的首字母变成大写字母

2、center / ljust / rjust / zfill

字符串.center(宽度,填充字符)
print('abc'.center(5,'*'))
字符串.ljust(宽度,填充字符)
print('abc'.ljust(5,'*'))
字符串.rjust(宽度,填充字符)
print('abc'.rjust(5,'*'))
字符串.zfill(宽度) == 字符串.zfill(宽度,'0')
print('abc'.zfill(5))

3、统计

1)、字符串1.count(字符串2)
2)、字符串1.count(字符串2,开始下标,结束下标) - 统计开始到结束范围内字符串2出现的次数
str2 = 'how are you? i am fine! thank you!'
print(str2.count('you'))
print(str2.count('a'))
print(str2.count('you', 0, 15))

4、判断str2是否以str1结尾

print(str2[-len(str1):] == str1)

5、字符串查找

获取一个字符串在另一个字符串中第一次出现的位置

str2 = 'how are you? i am fine! thank you!'
print(str2.index('you'))
print(str2.find('you'))

当字符串不存在的时候:index报错,find返回-1

6、join

字符串.join(序列) - 将序列中的元素用字符串连接在一起,产生新的字符串

str3 = '+'.join('abc')
print(str3)
str4 = ''.join('234cc')
print(str4)
str5 = ''.join({'a': 1, 'b': 2})
print(str5)

7、字符串替换

字符串1.replace(字符串2,字符串3)------将字符串1中所有的字符串2都替换成字符串3

str2 = 'how are you? i am fine! thank you!'
str2.replace('you', 'me')

字符串1.maketrans(字符串2,字符串3)------创建字符串2和字符串3—一对应的映射表
字符串1.translate(替换映射表) ------将字符串1中所有的字符串2都替换成字符串3

table = str.maketrans('a','b')
new_str2 = str2.translate(table)
print(new_str2)

8、切割

字符串1.split(字符串2)------将字符串1中所有的字符串2作为切割点切成多分,切割点会被去掉并返回一个列表

str2 = 'how are you? i am fine! thank you!'
print(str2.split(' '))
posted @ 2019-11-19 20:53  anjhon_木  阅读(418)  评论(0编辑  收藏  举报