1.字符串的概念
字符串是容器型数据类型;将’’、""、’’’’’’、""""""作为容器的标志
里面的每个富豪都是字符串的元素
一个单引号和双引号这种字符串只能在一行,无法换行
三个单引号和双引号可以换行
字符串的特点:不可变的;有序的
元素:引号中的每一个基本符号,元素又叫字符,字符又分为普通字符和转义字符两种。
普通字符:除了转义字符以外的就是转义字符
str1 = 'ji;da8sa两种靓仔👌'
str2 = "had函数238*"
str3 = """abc123
比比不知道
放入番薯粉"""
print(type(str3)) # <class 'str'>
转义字符
转义字符就是在特定的符号前加反斜杠让符号具备有特殊功能或者意义。
\n – 换行r,相当于return键
\t – 水平制表符,相当于tab键
’ – 表示一个单引号
" – 表示一个双引号
\ – 表示一个反斜杠
注意:转义字符的长度是1
print('hi1;\n123')
poem = '\t床前明月光,\n\t疑是地上霜,\n\t举头望明月,\n\t低头思故乡。'
print(poem)
# message = 'it's me!' # 报错
# 方案一
message = "it's me!"
print(message) # it's me!
# 方案二
message = 'it\'s me!'
print(message) # it's me!
message = 'I say:"how are you?"'
print(message) # I say:"how are you?"
message = "I say:\"how are you ?\""
print(message) # I say:"how are you?"
message = 'abv\\n123'
print(message) # abv\n123
file = 'C:\\name\\study\\aa.txt'
print(file) # C:\name\study\aa.txt
转义字符 - 编码字符
\u四位的十六进制数
功能:表示四位的十六进制数编码值对应的字符
1)字符编码
计算机在存储数据的时候只能存数字,而且只能存数字的二进制的补码,文本符号是不能直接存储在内存中,为了能够让计算机存储文本符号,就给每一个符号一个对固定的数字,在保存符号的时候就去保存这个符号对应的数字,每个符号对应的数字就是这个符号对应的编码值。
2)编码表 — 记录每个符号对应的编码值的表
ASCII表:数字字符在字母的前面,那么,编码值从0到9依次增加,从48开始
所有的大写字母在所有的小写字母前面,从65开始
大写字母和小写字母之间有间隙,从97开始
Unicode编码表:Unicode编码表是ASCII表的扩展,包含了ASCII表所有的内容
包含了所有国家所有语言的符号(万国码)
中文范围:4E00~9FA5
计算机中对数字的使用主要有四种进制:二进制、八进制、十进制和十六进制
1.十进制
基数:0~9
进位:逢十进一
位权:n*10**n(10的次方数) 123->三乘十的0次方加2乘10的1次方加1乘10的2次方
python表示:直接写
2.二进制
基数:0,1
进位:逢2进1
位权:2的次方数 2-> 1 0 0乘2的0次方加1乘2的一次方
python表示:加前缀0b/0B
3.八进制
基数:0~7
进位:逢8进1
位权:8的次方 9-> 11 1乘8的0次方+1乘8的1次方
python:加前缀0o/0O
4.十六进制
基数:0~9,a,b,c,d,e,f == 10,11,12,13,14,15
进位:逢16进1
位权:16的次方
python表示:0x/0X
hex(数字)—>可直接转换为16进制
print(0b1011) # 11
print(0o11) # 9
print(0xaf) # 175
# 1)编码字符:\u4位的16进制编码值
print('a\u0061') # aa
print(hex(97)) # 0x61
print('\u28ef') # ⣯(盲文)
2)编码相关函数
1.chr(编码值) - 获取指定编码值对应的字符,返回的数据类型是字符串
print(chr(97)) # a
print(chr(0x4e00)) # 一
print(chr(0x4e01)) # 丁
for x in range(0x4dc0,0x4def):
print(chr(x),end=' ')
if x % 20 ==0:
print()
2.ord(字符) - 获取字符编码值(字符用长度是1的字符串表示)
print(hex(ord('胡'))) # 32993 0x80e1
print(hex(ord('城'))) # 22478 0x57ce
# 练习:将输入的小写字母字符转换成对应的大写字母
p = 'z'
print(chr(ord('z')-32)) # Z
r = 'A'
print(chr(ord('A')+32)) # a
2.字符串的获取方法和相关操作
1.查 - 获取字符
字符串获取字符的方法和列表获取元素的方法一样
str1 = 'python'
print(str1[1]) # 'y'
print(str1[-1]) # 'n'
# print(str1[7]) # IndexError: string index out of range
str2 = 'abc\n123'
print(str2[4]) # 1,转义字符的长度是1
print(str1[2:]) # 'thon'
print(str1[1:-1:2]) # yh
print(str1[::-1]) # 'nohtyp'
for x in str1:
print('x:',x)
for x in range(len(str1)):
print(x,str1[x])
2.相关操作
1)+、* 运算规则和列表一样
str3 = 'abc'
str4 = 'xyz'
str5 = str4+'='+str3
print(str5) # 'xyz=abc'
print(str3*3) # 'abcabcabc'
2)比较相等和比较大小
比较相等不仅要比较元素的个数是否相等还要比较元素的位置是否一样
两个字符串比较大小比较的是第一对不相等的两个字符的编码值的大小
判断字符是否是小写字母:‘a’<=chr<=‘z’
判断字符是否是大写字母:‘A’<=chr<=‘Z’
判断字符是否是字母:‘a’<=chr<=‘z’or ‘A’<=chr<=‘z’
判断是否是数字:‘0’<=char<=‘9’
判断是否是中文字符:’\u4e00’<= char<=’\u9fa5’
# ==、!=
print('abc'=='abc') # True
print('abc'== 'bac') # False
# >、<、>=、<=
str6 = 'abc'
str7 = 'Qwer'
print(str6 > str7) # True
# 练习:统计字符串中数字字符的个数
str0 = 'jsj28海事局389sjj--3sskk9jj'
c = 0
for x in str0:
if '0' <= x <= '9':
c += 1
print(c)
# 提取字符中的中文字符
st ='aj好23l-数据--2啊'
new_str =''
for x in st:
if '一' <= x <= '\u9fa5':
new_str += x
# print(x,end='')
print(new_str) # 好数据啊
3)in 和not in
字符 in 字符串 - 判断字符串中是否存在指定的字符
字符串1 in 字符串2 - 判断字符串2中是否存在字符串1(判断字符串1是否是字符串2中的子串)
print('a' in 'abc') # True
print('ab' in 'abc') # True
print('ac' in 'abc') # False
4)相关函数
max、min、sorted(比较的字符的编码值的大小)
str(数据) - 将指定数据转换成字符串,所有的数据都能转换成字符串(所有的数据都能转换成布尔值)
转换规则:
直接在数据的打印值外加引号
str(100) # '100'
str([100,200]) # '[100,200]'
print(len(str([100,200]))) # 10
print(str({'a':10,'b':20})) # {'a': 10, 'b': 20}
# len -- 获取字符串的长度,获取字符串中字符的个数 注意编码字符的长度是1
print(len('\tabc\n123')) # 8
print(len('\\tabc\n213')) # 9
3.r语法
字符串的最前面可以加r、R,能够让字符串中所有的转义字符的功能消失,让字符串中的每一个符号都是普通字符
str1 = r'\ta\nbc\n12\\3'
print(str1) # \ta\nbc\n12\\3
3.常见的字符串的四种用法
1.字符串1.count(字符串2) - 返回字符串1中字符串2出现的次数
str1 = 'how are you? i am fine, thanks,and you?'
print(str1.count('h')) # 2
print(str1.count(' ')) # 7
print(str1.count('you')) # 2
2.字符串.join(序列) - 将序列中的元素用指定的字符串拼接产生一个新的字符串。(序列中的元素必须是字符串。)
result = '+'.join('abc')
print(result) # a+b+c
result = 'And'.join('hello')
print(result) # hAndeAndlAndlAndo
result = '+'.join(['name','age','gender'])
print(result) # name+age+gender
result = ''.join(['name','age','gender'])
print(result) # nameagegender
result = '*'.join({'a':10,'b':20,'c':30})
print(result) # a*b*c
# 练习:nums = [10,20,30,25,6]->'102030256'
# 方法1
nums = [10,20,30,25,6]
y = ''
for x in nums:
y += str(x)
print(y) # 102030256
print(type(y)) # <class 'str'>
# 方法2
result = ''.join([str(x) for x in nums])
print(result) # 102030256
list1 = [23,'name',309,34,'age',True,'abc']
result = '+'.join([x for x in list1 if type(x)==str ])
print(result) # name+age+abc
3.字符串1.split(字符串2) - 将字符串1中所有的字符串2作为切割点对字符串1进行切割,返回的是列表
字符串1.split(字符串2,N) - 将字符串1中前N个字符串2作为切割点对字符串1进行切割
str1 = 'abc+123+xyz+mn'
result = str1.split('+')
print(result) # ['abc', '123', 'xyz', 'mn']
result = str1.split('+',1)
print(result) # ['abc', '123+xyz+mn']
str2 = 'asda12asd12gfgf12dsas'
result = str2.split('12')
print(result) # ['asda', 'asd', 'gfgf', 'dsas']
str3 = '+das+123++23+fw+qwe+'
result = str3.split('+')
print(result) # ['', 'das', '123', '', '23', 'fw', 'qwe', '']
# 如果切割点连续或者切割点在边界,切割完成后会产生空串。
4.字符串1.replace(字符串2,字符串3)
字符串1.replace(字符串2,字符串3,N) - 替换前N个
功能:将字符串1中所有的字符串2全部替换成字符串3
str1 = 'abc+123+xyz+mn'
result = str1.replace('+','-')
print(result) # abc-123-xyz-mn
作业
-
输入一个字符串,打印所有奇数位上的字符(下标是1,3,5,7…位上的字符)
例如: 输入**'abcd1234 ’ ** 输出**‘bd24’**
a = 'abcd1234' print(a[1::2])
-
输入用户名,判断用户名是否合法(用户名长度6~10位)
a = str(input('请设置一个用户名:')) if 6 <= len(a) <= 10: print('合法') else: print('不合法')
-
输入用户名,判断用户名是否合法(用户名中只能由数字和字母组成)
例如: ‘abc’ — 合法 ‘123’ — 合法 ‘abc123a’ — 合法
a = input('请设置一个用户名:') for x in a: if not('a' <= x <= 'z' or 'A' <= x <= 'Z' or '0' <= x <= '9'): print('不合法!') break else: print('合法!')
-
输入用户名,判断用户名是否合法(用户名必须包含且只能包含数字和字母,并且第一个字符必须是大写字母)
a = input('请设置一个用户名:') if 'A' <= a[0] <= 'Z': for x in a[1:]: if not('a' <= x <= 'z' or 'A' <= x <= 'Z' or '0' <= x <= '9'): print('不合法!') break else: print('合法!') else: print('不合法!')
例如: ‘abc’ — 不合法 ‘123’ — 不合法 ‘abc123’ — 不合法 ‘Abc123ahs’ — 合法
5.输入一个字符串,将字符串中所有的数字字符取出来产生一个新的字符串
例如:输入**‘abc1shj23kls99+2kkk’** 输出:'123992’
a = 'abc1shj23kls99+2kkk'
new_a = ''
for x in a:
if '0' <= x <= '9':
new_a += x
print(new_a)
-
输入一个字符串,将字符串中所有的小写字母变成对应的大写字母输出 (用upper方法和自己写算法两种方式实现)
a = input('请输入一个字符串:') b = '' for x in a: if 'a' <= x <= 'z': b += chr(ord(x) - 32) else: b += x print(b) a = input('请输入一个字符串:') b = a.upper() print(b)
例如: 输入**‘a2h2klm12+’ ** 输出 'A2H2KLM12+'
-
输入一个小于1000的数字,产生对应的学号
例如: 输入**‘23’,输出’py1901023’** 输入**‘9’, 输出’py1901009’** 输入**‘123’,输出’py1901123’**
a = 'py190' b = input('请输入一个1到1000的数:') result = a+ str(int(b)+1000) print(result)
-
输入一个字符串,统计字符串中非数字字母的字符的个数
例如: 输入**‘anc2+93-sj胡说’** 输出:4 输入**’===’** 输出:3
c = 0 a = 'anc2+93-sj胡说' for x in a: if not (('a' <= x <= 'z' or 'A' <= x <= 'Z') or '0' <= x <= '9'): c += 1 print(c)
-
输入字符串,将字符串的开头和结尾变成’+’,产生一个新的字符串
例如: 输入字符串**‘abc123’, 输出’+bc12+’**
a = 'abc123' b ='+'+a[1:len(a)-1]+'+' print(b)
-
输入字符串,获取字符串的中间字符
例如: 输入**‘abc1234’** 输出:‘1’ 输入**‘abc123’** 输出**‘c1’**
a = input('请输入字符串:')
b = len(a)
if b % 2:
print(a[b//2])
else:
print(a[b//2-1],a[b//2])
- 写程序实现字符串函数find/index的功能(获取字符串1中字符串2第一次出现的位置)
例如: 字符串1为:how are you? Im fine, Thank you! , 字符串2为:you, 打印8
- 获取两个字符串中公共的字符
例如: 字符串1为:abc123, 字符串2为: huak3 , 打印:公共字符有:a3
a = input('请输入一个字符串:')
b = input('请输入一个字符串:')
c = ''
for x in a:
if x in b:
c += x
print(c)