3.11总结
01review
-
字典(dict)
-
增、改
字典[key] = 值 (增、改)
字典.setdefault(key,值) - 只能增 -
删
字典[key] = 值 (增、改)
字典.setdefault(key,值) - 只能增 -
相关操作
字典[key] = 值 (增、改)
字典.setdefault(key,值) - 只能增
-
-
集合(set)
字典[key] = 值 (增、改)
字典.setdefault(key,值) - 只能增-
查: 遍历
-
增: add、 update
-
删: remove、 discard
-
数学集合运算:
交集( & )、并集( | )、差集( - )、对称差集( ^ )、子集( >=,<= )和真子集( >、< )
-
02system
计算机对于数字的使用主要4种进制:二进制、八进制、十进制和十六进制
-
十进制
""" 基数:0 ~ 9 进位:逢10进1 位权:10的次方数(从0开始) 123 -> 3*10**0 + 2*10**1 + 1*10**2 == 123 Python表示:直接写 """ print(10) print(123)
-
二进制
""" 基数:0 ~ 1 进位:逢2进1 位权:2的次方数 100 -> 0*2**0 + 0*2**1 + 1*2**2 == 4 1011 -> 2**0 + 2**1 + 2**3 == 11 Python表示:加前缀0b/0B """ print(0b1011) # 11 # print(0b1211101) # 报错
-
八进制
""" 基数:0 ~ 7 进位:逢8进1 位权:8的次方数 23 -> 3*8**0 + 2*8**1 == 19 Python表示:加前缀0o / 0O """ print(0o23)
-
十六进制
""" 基数:0~9,a~f(A~F) 进位:逢16进1 位权:16的次方数 Python表示:0x/0X af -> 15*16**0 + 10*16**1 == 175 hex(数字) """ print(0xaf) # 175 print(0b1100100) # 100 print(0o144) # 100 print(0x64) # 100 print(hex(97))
03str
-
什么是字符串 ( str )
- 字符是容器型数据类
- 将’ ‘、" “、”"" “”"、’’’ ‘’'作为容器的标志,里面的每个符号就是字符串的元素
- 不可变;有序
- 元素:字符串的元素就是引号中的每一个基本符号。元素又叫字符,字符又分为普通字符和转义字符两种。
-
转义字符
转义字符就是在特定的符号前加\让符号具备特殊的功能或者意义。
- \n - 换行,相当于return键
- \t - 水平制表符,相当于tab键
- \ ’ - 表示一个单引号
- \ " - 表示一个双引号
- \ \ - 表示一个反斜杠
注意:转义字符的长度是1
print('hj8;\n123') poem = '\t床前明月光,\n\t疑是地上霜。\n\t举头望明月,\n\t低头思故乡。' print(poem) # message = 'it's me!' # SyntaxError: invalid syntax # message = "it's me!" # 方案一 message = 'it\'s me!' # 方案二 print(message) # message = "I say:"how are you?"" # SyntaxError: invalid syntax # message = 'I say:"how are you?"' message = "I say:\"how are you?\"" print(message) message = 'abc\\n123' print(message) file = 'C:\\name\\study\\aa.txt' print(file)
-
转义字符 - 编码字符
\u四位的十六进制数 - 表示四位的十六进制数编码值对应的字符
message = 'abc\u4f78=\\u==' print(message) # abc佸===
-
字符编码
- 字符编码
计算机在存储数据的时候只能存数字(存数字的二进制补码),文本符号是不能直接保存在内存中的,为了能够让计算机存储文本符号,
就给每个符号对应一个固定的数字,在保存符号的时候就去保存这个符号对应的数字。每个符号对应的数字就是这个符号的编码值。-
编码表 - 记录每个符号对应的编码值的表
- a.ASCII码表:
数字字符在字母的前面,编码值从字符0到字符9依次增加;
所有大写字母在所有的小写字母前面;
大写字母和小写字母之间有间隙; - b.Unicode编码表:
Unicode是ASCII码表的扩展,包含了ASCII码表中所有的符号;
包含了所有国家所有民族的所有语言的符号(万国码);
中文范围:4e00 ~ 9fa5
- a.ASCII码表:
-
编码相关的函数
-
chr(编码值) - 获取指定编码对应的字符,返回的数据的类型是字符串
print(chr(97)) # a print(chr(0x4e00)) # 一 print(chr(0x4e01)) # 丁for x in range(0x4e00, 0x9fa5+1): print(chr(x), end=' ') if x % 30 == 0: print() print('===========================') for x in range(0x1800, 0x18AF+1): print(chr(x), end=' ') print() for x in range(0x4dc0, 0x4dff+1): print(chr(x), end=' ') print()
-
ord(字符) - 获取字符编码值(字符用长度是1的字符串表示)
print(hex(ord('余'))) # 20313 0x4f59 print(hex(ord('婷'))) # 23159 0x5a77 # 写一个程序将输入的小写字母字符转换成对应的大写字母 p = 'm' code = ord(p) - 32 print(chr(code))
-
-
查 - 获取字符
字符串获取字符的方法和列表获取元素的方法一样
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 print(str1[2:]) # 'thon' print(str1[1:-1:2]) # 'yh' print(str1[::-1]) # 'nohtyp' for x in str1: print('x:', x) for index in range(len(str1)): print(index, str1[index])
-
相关操作
-
+、 *
str2 = 'abc' str3 = 'xyz' str4 = str2 + str3 # 'abcxyz' print(str4) # 'abcxyz' str5 = str2 + '=' + str3 print(str5) # 'abc=xyz' print(str2 * 3) # 'abcabcabc'
-
==、!=
print('abc' == 'abc') # True print('abc' == 'bac') # False
-
.> 、<、>=、<=
两个字符串比较大小比较的是第一对不相等的字符的编码值的大小
- 判断字符是否是小写字母: ‘a’ <= char <= ‘z’
- 判断字符是否是大写字母: ‘A’ <= char <= ‘Z’
- 判断字符是否是字母: ‘a’ <= char <= ‘z’ or ‘A’ <= char <= ‘Z’
- 判断是否是数字字符: ‘0’ <= char <= ‘9’
- 判断是否是中文字符: ‘\u4e00’ <= char <= ‘\u9fa5’
str6 = 'abc' str7 = 'aXYZMN' print(str6 > str7) # True # 练习:统计字符串中数字字符的个数 str0 = 'jsj28海事局389sjj--3sskk9jj' count = 0 for x in str0: if '0' <= x <= '9': count += 1 print('数字的个数:', count) # 练习:提取字符中所有的中文字符 # 'aj好23l-数据--2啊' -> '好数据啊' str1 = 'aj好23l-数据--2啊' new_str = '' for x in str1: if '\u4e00' <= x <= '\u9fa5': # print(x, end='') new_str += x print(new_str) # '好数据啊'
- 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
-
max、min、sorted、str、len
# str(数据) - 将指定数据转换成字符串(所有类型的数据都可以转换成字符串;转换的时候直接在数据的打印值外面加引号) str(100) # '100' str([100, 200]) # '[100, 200]' str({'a': 10, 'b': 20}) # "{'a': 10, 'b': 20}" # c.len(字符串) - 获取字符串中字符的个数 print(len('\tabc\n123')) # 8 print(len('\\tabc\n123')) # 9
-
r语法
字符串的最前面加r/R,能够让字符串中所有转义字符的功能消失,字符串中的每个符号都是普通字符
str1 = r'\tabc\n12\\3\'' print(str1) # \tabc\n12\\3\' path = R'C:\uers\yuting\name\test\aa.txt' print(path) # C:\uers\yuting\name\test\aa.txt
-
-
相关方法
-
字符串1.count(字符串2) - 返回字符串1中字符串2出现的次数
str1 = 'how are you? i am fine, thank you!' print(str1.count('h')) # 2 print(str1.count(' ')) # 7 print(str1.count('you')) # 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' nums = [10, 20, 30, 25, 6] # 方法一: result = '' for x in nums: result += str(x) print(result) # 102030256 # 方法二: result = ''.join([str(x) for x in nums]) print(result) # 102030256 list1 = [23, 'name', 309.9, 'age', True, 'abc'] # 'name+age+abc' result = '+'.join([x for x in list1 if type(x) == str]) print(result) # name+age+abc
-
- 字符串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'] str2 = 'hejs123斯柯达123000' result = str2.split('123') print(result) # ['hejs', '斯柯达', '000']
如果切割点连续或者切割点在边界,切割完成后会产生空串
str3 = '+abc+123++xyz+mn+' result = str3.split('+') print(result) # ['', 'abc', '123', '', 'xyz', 'mn', ''] str1 = 'abc+123+xyz+mn' result = str1.split('+', 1) print(result) # ['abc', '123+xyz+mn']
-
- 字符串1.replace(字符串2, 字符串3) - 将字符串1中所有的字符串2全部替换成字符串3字符串1.replace(字符串2, 字符串3, N)
str1 = 'abc+123+xyz+mn' result = str1.replace('+', '-') print(result) # abc-123-xyz-mn
-
3.11字符串作业
-
输入一个字符串,打印所有奇数位上的字符(下标是1,3,5,7…位上的字符)
例如: 输入**'abcd1234 ’ ** 输出**‘bd24’**
str1 = input('请输入一串字符:') print(str1[1::2])
-
输入用户名,判断用户名是否合法(用户名长度6~10位)
str2 = input('请输入用户名:') for x in range(len(str2)): if 6 <= len(str2) <= 10: print('用户名合法') break else: print('用户名不合法')
-
输入用户名,判断用户名是否合法(用户名中只能由数字和字母组成)
例如: ‘abc’ — 合法 ‘123’ — 合法 ‘abc123a’ — 合法
# 方法一: str3 = input('请输入用户名:') for x in str3: if '0' <= x <= '9' or ('a' <= x <= 'z' or 'A' <= x <= 'Z'): continue else: print('用户名不合法') break else: print('用户名合法') # 方法二: str3 = input('请输入用户名:') for x in str3: if not ('0' <= x <= '9' or 'a' <= x <= 'z' or 'A' <= x <= 'Z'): print('用户名不合法') break else: print('用户名合法')
-
输入用户名,判断用户名是否合法(用户名必须包含且只能包含数字和字母,并且第一个字符必须是大写字母)
例如: ‘abc’ — 不合法 ‘123’ — 不合法 ‘abc123’ — 不合法 ‘Abc123ahs’ — 合法
str4 = input('请输入用户名:') if 'A' <= str4[0] <= 'Z': count = 0 for x in str4[1:]: if '0' <= x <= '9' or 'a' <= x <= 'z' or 'A' <= x <= 'Z': if '0' <= x <= '9': count += 1 else: print('用户名不合法') break else: if count == 0: print('用户名不合法') else: print('用户名合法') else: print('用户名不合法')
-
输入一个字符串,将字符串中所有的数字字符取出来产生一个新的字符串
例如:输入**‘abc1shj23kls99+2kkk’** 输出:'123992’
# 方法一: str_ = input('请输入一个字符串:') str5 = '' for x in str_: if '0' <= x <= '9': str5 += x print(str5) # 方法二: str5 = ''.join([x for x in str1 if '0' <= x <= '9']) print(str5)
-
输入一个字符串,将字符串中所有的小写字母变成对应的大写字母输出 (用upper方法和自己写算法两种方式实现)
例如: 输入**‘a2h2klm12+’ ** 输出 'A2H2KLM12+'
# 方法一: str_ = input('请输入一个字符串:') print(str_.upper()) # 方法二: str6 = input('请输入一个字符串:') str_ = '' for x in str6: if 'a' <= x <= 'z': str_ += chr(ord(x)-32) continue str_ += x # 方法三: str6 = input('请输入一个字符串:') str6 = ''.join([(chr(ord(x)-32) ) if 'a' <= x <= 'z' else x for x in str6]) print(str6)
-
输入一个小于1000的数字,产生对应的学号
例如: 输入**‘23’,输出’py1901023’** 输入**‘9’, 输出’py1901009’** 输入**‘123’,输出’py1901123’**
# 方法一: str7 = input('请输入小于1000的数字:') str_ = 'py1901' new_str7 = str_ + '0'*(3-len(str7)) + str7 print(new_str7) # 方法二: # 字符串.zfill(N) str7 = input('请输入小于1000的数字:') print('abc'.zfill(5)) # 00abc new_str7 = 'py1901' + str7.zfill(3) print(new_str7) # 方法三: str7 = input('请输入小于1000的数字:') str_ = 'py1901' if 0<= int(str7) <= 9: print(str_ + '00' + str7) elif 10 <= int(str7) <= 99: print(str_ + '0' + str7) else: print(str_ + str7)
-
输入一个字符串,统计字符串中非数字字母的字符的个数
例如: 输入**‘anc2+93-sj胡说’** 输出:4 输入**’===’** 输出:3
str8 = input('请输入一个字符串:') count = 0 for x in str8: if not ('0' <= x <= '9' or'a' <= x <= 'z' or 'A' <= x <= 'Z'): count += 1 print('非数字字母的字符的个数 :', count)
-
输入字符串,将字符串的开头和结尾变成’+’,产生一个新的字符串
例如: 输入字符串**‘abc123’, 输出’+bc12+’**
# 方法一: str9 = input('请输入一个字符串:') new_str9 = '+' + str1[1:-1] + '+' print(new_str9) # 方法二: str9 = input('请输入一个字符串:') new_str9 = '' for x in range(len(str9)): if x ==0 or x == len(str9)-1: new_str9 += '+' continue new_str9 += str9[x] print(new_str9)
-
输入字符串,获取字符串的中间字符
例如: 输入**‘abc1234’** 输出:‘1’ 输入**‘abc123’** 输出**‘c1’**
str10 = input('请输入一个字符串:')
if len(str10) % 2:
print(str10[len(str10)//2])
else:
print(str10[len(str10)//2-1],str10[len(str10)//2])
- 写程序实现字符串函数find/index的功能(获取字符串1中字符串2第一次出现的位置)
例如: 字符串1为:how are you? Im fine, Thank you! , 字符串2为:you, 打印8
s1 = 'how are you? Im fine, Thank you!'
s2 = 'you'
l2 = len(s2)
for index in range(len(s1) - l2 + 1):
if s1[index: index + l2] == s2:
print(index)
break
else:
print('没有该子串')
- 获取两个字符串中公共的字符
例如: 字符串1为:abc123, 字符串2为: huak3 , 打印:公共字符有:a3
s1 = 'abc1123'
s2 = 'huak3'
# 方法一:
str12 =''
for x in s1:
if x in s2 and x not in str12:
str12 += x
print(str12)
# 方法二:
str12 = ''.join(set(s1) & set(s2))
print(str12)