01字符串和字符
-
什么是字符串
- 字符串是容器型数据类型(序列)、将‘’ 或者 ”“ 或者’’’ ‘’’ 或者”“” “”“作为容器标志
- 里面每一个独立的符号就是字符串的一个元素
- 字符串是不可变的 不支持增删改
- 字符串是有序的 (支持下标操作)
- 字符串的元素:引号里面的每个符号都是字符串的元素,字符串的元素又叫字符
- 字符分为两种:普通字符和转义字符
- 1)空串 (引号里什么也没有,空格也不行)
empty1 = '' empty2 = "" empty3 = '''''' empty4 = """""" print(type(empty1),len(empty1)) # <class 'str'> 0
-
- 字符串的容器标志
# ''和“”没有区别;’‘’‘’‘和“”“”“”没有区别 # ’‘和""里面的内容不能通过直接回车换行,只能通过转义字符换行; # ‘’‘’‘’ 和“”“”“”里面得到内容可以直接通过回车换行 # str1 = 'abc # 123' str2 = '''abc 123''' print(str2) # abc # 123 str3 = 'abc,\n123' print(str3) # abc, # 123
-
字符串的元素 - 字符
-
字符分为普通字符和转义字符两种
-
1)普通字符 - 在字符串中表示符号本身的字符
-
2)转义字符 - 使用\和其他符号一起来表示特殊功能和意义的字符
- \n - 换行
- \t - 水平制表符(相当于tab)
- \’ - 一个普通的‘
- \" - 一个普通的“
- \ - 一个普通的\
-
- 阻止转义 - 让字符串中所有的转义字符功能消失(让一个字符串中的每一个符号都表示符号本身)
在字符串前加r/R : r’’, R’’ 例如:正则表达式
-
- 转义字符 - 编码字符
str1 = '\tabc\n123' print(str1) # abc # 123 # abc # 123 str2 = 'abc\'12' print(str2) # abc'12 str3 = "abc'12" print(str3) # abc'12 str4 = 'C:users\\name\\xiaoming\\next.txt' print(str4) str5 ='http://www.baidu.com' print(str5) str6 = r'C:users\name\xiaoming\next.txt' # C:users\name\xiaoming\next.txt print(str6) # \u4位的16进制数 - 16进制的编码值对应的字符 str7 = 'abc\u4e60123' # abc习123 print(str7)
-
-
编码值 - 字符编码
-
1)编码值 - 计算机在存储符号的时候七十存的是这个符号对应的固定数字。这个数字就是符号对应的编码值
-
2)编码表 - 将字符和数字一一对应的表
-
ASCII码表 - 总共有128个符号,只有没有常用符号,不包括中文
数字–大写字母(65)–小写字母(97),大小写字母有间隙 -
Unicode编码表(python) -Unicode编码表中包含ASCII码
包含目前世界所有国家所有民族的所有语言符号(万国码) -
中文编码范围 - 4e00~9fa5
-
1)chr(编码值) - 获取编码值对应的字符
-
2)ord(字符) - 获取指定字符的编码值(凡是需要字符的地方,都给长度是1的字符)
-
3)编码字符 - \u4e00 (16进制)
print(chr(97)) # a print(chr(0x4e00)) # 一 print(chr(0x9fa5)) # 龥
-
-
进制 - 计算机中数字常见进制有4种:2进制 8进制 10进制 16进制
-
1)10进制
- 基数:0 1 2 3 4 5 6 7 8 9
- 进位:逢10进1
- 位权:10**(n-1)
- 表示方式:直接写
-
2)2进制
-
基数:0 1
-
进位:逢2进1
-
位权:2**(n-1)
-
表示方式:0b / 0B
print(0b110) # 6
-
-
3)8进制
-
基数:0 1 2 3 4 5 6 7
-
进位:逢8进1
-
位权:8**(n-1)
-
表示方式:0o /0O开头
print(0o26) # 22
-
-
4)16进制
-
基数:0 1 2 3 4 5 6 7 8 9 a/A b/B c/C d/D e/E f/F
-
进位:逢16进1
-
位权:16**(n-1)
-
表示方式:0x / 0X开头
print(0x1f) # 31
print(0x9fa5 - 0x4e00) # num = 0 # for x in range(0x4e00,0x9fa5+1): # num += 1 # print(chr(x),end=' ') # if num % 30 ==0: # print() print(ord('王'),ord('志'),ord('萍')) # hex() 把其他进制的数据转换为16进制 print(hex(29579),hex(24535),hex(33805)) # 0x738b 0x5fd7 0x840d print('a123') print('\u0061123') # a123 a--97 --61(16进制)--0061
-
02计算机基础
# 1.内存单位
# 位 (bit) - 计算机内存最小单位
# 字节(byte) 1字节 = 8位 - 程序申请内存的最小单位
# 1Kb = 1024字节 2^10
# 1Mb = 1024Kb
# 1G = 1024Mb
# 1T = 1024G
# ...
03字符串相关操作
-
1.查 - 字符串获取字符和列表获取元素的语法一样
message = 'you see see one day day!' print(message[2],message[-1]) # 一个空格是一个字符 str1 = 'abc 123' print(str1[4]) # 1 # 一个转义字符是一个字符,长度是1 str2 = '\tabc\u4fa9 123' print(str2[6]) # 1 # 切片 print(message[1:5]) # ou s print(message[:-5:-1]) # !yad # 遍历 for x in 'ab\u67afc': print(x)
-
2.运算符
- 字符串1 + 字符串2 - 将两个字符串拼接产生一个新字符串
- 字符串 *N - 将字符串重复N次
print('abc'+'123') # abc123 # 字符串 *N - 将字符串重复N次 print('abc' * 3) # abcabcabc print('abc' == 'acb') # False print('a' == '\u0061') # True
-
比较大小:> < >= <=
两个字符串比较大小比较的是第一对不相等的字符的编码值的大小
print('abc' > 'cd') # False """ 判断数字: '0' <= char <= '9' 判断小写字母:'a' <= char <= 'z' 判断大写字母:'A' <= char <= 'Z' 判断字母:'a' <= char <= 'z' or 'A' <= char <= 'Z' 判断中文:'\u4e00' <= char <= '\u9fa5' """ # 练习:提取一个字符串中所有的数字字符 # 'sh函数78sk--2o' -> '782' str3 = '' for x in 'sh函数78sk--2o': if '0' <= x <= '9': str3 += x print(str3) print(ord('9')) # 提取中文 # 'sh函数78sk--好2o' -> '函数好' str4 ='' for x in 'sh函数78sk--好2o': if '\u4e00' <= x <= '\u9fa5': str4 += x print(str4) str5 = 'sh函数78sk--好2o' result = ''.join([x for x in str5 if '\u4e00' <= x <= '\u9fa5']) print(result)
-
3.in 和 not in
字符串1 in 字符串2 - 判断字符串2中是否包含字符串1 判断字符串是否是字符串2的子串
print('abc' in 'a1b2c3') # False print('abc' in 'abc123') # True print('1' in 'abc123') # True
-
4.相关函数 len str
str(数据) - 将数据转换成字符串(任何类型都可以转换成字符串)
转换的时候直接在数据的打印值外加引号
print(str(100)) # '100' list1 = [1,2,3] print(str(list1)) # '[1, 2, 3]' -> 9个元素 dict1 = {'name':'小明','age':18} print(str(dict1)) # "{'name': '小明', 'age': 18}" dict2 = {"name":'小明'} print(dict2) # {'name': '小明'} 打印值是单引号 print(str(dict2)) # "{'name': '小明'}" func1 = lambda x: x*2 print(func1) # <function <lambda> at 0x00000292EDCC4168> print(str(func1)) # '<function <lambda> at 0x00000292EDCC4168>'
04 字符串相关方法
-
1.字符串.join(序列) - 将序列中的元素使用指导字符串连接
序列中的元素必须是字符串一个新的字符串
names = ['小明', '张三', '李四'] result = ''.join(names) print(result) # 小明张三李四 result = '+'.join(names) print(result) # 小明+张三+李四 message = 'abc' print('.'.join(message)) # a.b.c dict1 = {'name': 'hh', 'age': 12} print('.'.join(dict1)) # name.age num = [10,9,78,67] # print(''.join(num)) # TypeError: sequence item 0: expected str instance, int found result = ''.join([str(x) for x in num]) print(result) # 1097867 list1 = ['name', 23, True, '你好', '哈哈'] result = '+'.join([x for x in list1 if type(x) == str]) print(result) # name+你好+哈哈
-
2.spilt - 切割
-
字符串.split(字符串2) - 将字符串1中所有的字符串2作为切割点对字符串1进行切割
-
字符串.split(字符串2,N) - 将字符串1中前N个字符串2作为切割点对字符串1进行切割
str1 = 'how are you? i am fine,thank you. and you?!' result = str1.split(' ') print(result) # ['how', 'are', 'you?', 'i', 'am', 'fine,thank', 'you.', 'and', 'you?'] result = str1.split('you') print(result) # ['how are ', '? i am fine,thank ', '. and ', '?'] # 最后一个是空串 result = str1.split('!') print(result) # ['how are you? i am fine,thank you. and you?', ''] # str2 ='abc12mn12xy12==12++' print(str2.split('12',2)) # ['abc', 'mn', 'xy12==12++']
-
-
3.replace
字符串1.replace(字符串2,字符串3) - 将字符串1中所有的字符串2都替换成字符串3
字符串1.replace(字符串2,字符串3,N) - 将字符串1中前N个字符串2都替换成字符串3
str3 = 'how are you? i am fine,thank you. and you?!' result = str3.replace('you','me') print(result) # how are me? i am fine,thank me. and me?! result = str3.replace('you','me',2) print(result) # how are me? i am fine,thank me. and you?!
作业
-
输入一个字符串,打印所有奇数位上的字符(下标是1,3,5,7…位上的字符)
例如: 输入**'abcd1234 ’ ** 输出**‘bd24’**
str1 = input('请输入字符串:') str2 = str1[1::2] print(str2)
-
输入用户名,判断用户名是否合法(用户名长度6~10位)
str3 = input('请输入用户名:') if 6 <= len(str3) <= 10: print('合法') else: print('不合法')
-
输入用户名,判断用户名是否合法(用户名中只能由数字和字母组成)
例如: ‘abc’ — 合法 ‘123’ — 合法 ‘abc123a’ — 合法
str4 = input('请输入用户名:') flag = 0 for i in range(len(str4)): if 'a' <= str4[i] <= 'z' or '0' <= str4[i] <= '9': flag = 1 else: flag = 0 break if flag: print('合法') else: print('不合法')
-
输入用户名,判断用户名是否合法(用户名必须包含且只能包含数字和字母,并且第一个字符必须是大写字母)
例如: ‘abc’ — 不合法 ‘123’ — 不合法 ‘abc123’ — 不合法 ‘Abc123ahs’ — 合法
str4 = input('请输入用户名:') for i in range(1,len(str4)): if 'A' <=str4[0] <='Z' and ('a' <= str4[i] <= 'z' or '0' <= str4[i] <= '9'): continue else: print('不合法') break else: print('合法')
-
输入一个字符串,将字符串中所有的数字字符取出来产生一个新的字符串
例如:输入**‘abc1shj23kls99+2kkk’** 输出:'123992’
str5 = input('请输入一个字符串:') result = ''.join([x for x in str5 if '0' <= x <= '9']) print(result)
-
输入一个字符串,将字符串中所有的小写字母变成对应的大写字母输出 (用upper方法和自己写算法两种方式实现)
例如: 输入**‘a2h2klm12+’ ** 输出 'A2H2KLM12+'
#F1 str6 = input('请输入一个字符串:') print (str6.upper()) #F2 for i in str6: if 97 <= ord(i) <= 122: x = ord(i) - 32 print(chr(x), end="") else: print(i, end="") print()
-
输入一个小于1000的数字,产生对应的学号
例如: 输入**‘23’,输出’py1901023’** 输入**‘9’, 输出’py1901009’** 输入**‘123’,输出’py1901123’**
nums = input('请输入小于1000的数字:') new_num = '' for i in range(3 - len(nums)): new_num += '0' print('python1'+new_num+nums)
-
输入一个字符串,统计字符串中非数字字母的字符的个数
例如: 输入**‘anc2+93-sj胡说’** 输出:4 输入**’===’** 输出:3
str7 = input('请输入字符串:') count = 0 for i in range(1,len(str7)): if not 'a' <= str7[i] <= 'z' or '0' <= str7[i] <= '9': count += 1 print(count)
-
输入字符串,将字符串的开头和结尾变成’+’,产生一个新的字符串
例如: 输入字符串**‘abc123’, 输出’+bc12+’**
str8 = input('请输入字符串:') print('+'+str8[1:-1]+'+')
-
输入字符串,获取字符串的中间字符
例如: 输入**‘abc1234’** 输出:‘1’ 输入**‘abc123’** 输出**‘c1’**
str9 = input('请输入字符串:')
l = len(str9)
if l % 2:
print(str9[len(str9) // 2])
else:
print(str9[len(str9) // 2 -1: len(str9) // 2 + 1 ])
- 写程序实现字符串函数find/index的功能(获取字符串1中字符串2第一次出现的位置)
例如: 字符串1为:how are you? Im fine, Thank you! , 字符串2为:you, 打印8
str1 ='how are you? Im fine, Thank you!'
str2 = 'you'
#print(str1.find(str2))
#print(str1.index(str2))
result = str1.split(str2,1)
print(len(result[0]))
#index()方法与 python find()方法一样,只不过如果str不在 string中会报一个异常。
- 获取两个字符串中公共的字符
例如: 字符串1为:abc123, 字符串2为: huak3 , 打印:公共字符有:a3
str1 = 'abc123'
str2 = 'huak3'
new_str = ''
for x in str1:
if x in str2:
new_str += x
print(new_str)