学习日记 2022-4-21
一、元组和集合
1. 元组
1.1 什么是元组(tuple)
容器:将()作为容器表示,里面多个元素用逗号隔开:(元素1,元素2,元素3,…)
不可变的(不支持增删改);有序的(支持下标操作)
元素:任何元素
空元组 - t1 = ()
注意:只有一个元素的元组(重点!) - 唯一的元素后必须加逗号
在没有歧义的情况下,元组的小括号() 可以省略 - 直接多个数据用逗号隔开,表示的也是一个元组
1.2 元组就是不可变的列表
列表中除了和可变相关的操作,其他操作元组都支持
t2 = (100,)
print(t2,type(t2),len(t2))
t3 = 199,23213,111
print(t3)
print(t3[2]) # 111
print(t3*3) # (199, 23213, 111, 199, 23213, 111, 199, 23213, 111)
print(len(t3)) # 3
print(t3+t2) # (199, 23213, 111, 100)
print(sorted(t3)) # print(sorted(t3))
print(sorted(t3,reverse = True)) # [23213, 199, 111]
2. 集合
2.1 什么是集合(set)
容器:{}作为容器的标志,里面多个元素用逗号隔开:{元素1,元素2,元素3,…}
可变的;无序的
元素的要求:和字典对键的要求一样(不可变的数据,唯一的)
空集合 - s1 = set()
集合无序
print({1,2,3} == {3,1,2}) #True
# 元素是不可变类型的数据
# s2 = {10,'ac',[1,2]} # 报错
s2 = {10,'ac',(1,2)}
print(s2) # {'ac', 10, (1, 2)}
# 元素是不可变类型的数据
# s2 = {10,'ac',[1,2]} # 报错
s2 = {10,'ac',(1,2)}
print(s2) # {'ac', 10, (1, 2)}
数学集合运算:&(交集)、|(并集)、-(差集)、^(对称差集)、>、<、>=、<=
&(交集) - 集合1 & 集合2 - 获取两个集合的公共部分
s1 = {1,2,3,4,5,6,7}
s2 = {5,6,7,8,9}
print(s1&s2) # 交集 {5, 6, 7}
print(s1|s2) # 并集 {1, 2, 3, 4, 5, 6, 7, 8, 9}
print(s1 - s2) # 差集 {1, 2, 3, 4}
print(s2 - s1) # 差集 {8, 9}
print(s1 ^ s2) # 对称差集 {1, 2, 3, 4, 8, 9}
二、认识字符串
1. 什么是字符串(str)
字符串是容器型数据类型:将’‘、“”、’‘’‘’'、“”“”""作为容器的标志,引号中的每个符号就是字符串的元素
字符串不可变;字符串有序(支持下标操作)
元素:引号中的每个符号就是字符串的元素,字符串的元素又叫字符。字符分为普通字符和转义字符两种
1.1 引号中的每个符号都是字符串的元素,对于符号本身没有限制
str1 = 'abc萨达萨达aaa*....'
# 'abc萨达萨达'
new_str1 = str1.upper()
print(new_str1) # ABC萨达萨达AAA*....
1.2 引号问题
str2 = "msmsmsmsaa1123"
str3 = ''' 123fsdfsdf'''
str4 = """nasjhdu1lh12y38"""
print(type(str2),type(str3),type(str4)) # <class 'str'> <class 'str'> <class 'str'>
1.3 多行字符串 ‘’‘’''和“”“”“” 字符串内容可以直接按回车换行
1.4 空串
str1 = ''
print(len(str1)) # len = 0
三、字符和转义字符
1. 字符 - 字符串的元素
1.1 普通字符 - 在字符串中表示符号本身的字符就是普通字符,例如:中文、字母、数字等
1.2 转义字符 - 在特定的符号前加\来表示特殊功能或者特殊意义的符号就是转义字符
\t - 水平制表符(相当于按一次tab键)
\n - 换行
’ - 表示一个普通的单引号
" - 表示一个普通的双引号
\ - 表示一个普通的反斜杠
print('\tabc\n123')
print('it\'s me' ) # it's me
print('\\tac') # \tac
2. R语法
字符串的最前面可以加r或R,让字符串中所有的转义字符功能消失,所有的符号都变成普通字符:r’‘、R’’
str1 =r'\tadasd\n123\u4e00'
print(str1) # \tadasd\n123\u4e00
path = r'C:\ndesk\tsss\aaa'
print(path) # C:\ndesk\tsss\aaa
四、字符编码
1. 字符编码
计算机存储原理:计算机保存数据的时候只能存数字,而且存的是数字的补码
字符编码:为了能够让计算机保存文字符号,我们给每一个符号对应了一个固定的数字,在存储符号的时候就保存这个符号对应的数字,那么这个数字就是这个符号的编码值
2. 编码表 - 保存符号和编码值对应关系的表
2.1 ASCII码表:通过一个字节来对128个字符进行编码,里面的字符是美国通用的符号
数字在大写字母的前面、大写字母在小写字母前面、大写字母和小写字母之间有间隙(A-65;a-97)
2.2 Unicode编码表(python) - 万国码 - 包含了世界上所有的国家所有的民族所有的语言的符号
2.2.1 Unicode编码表是ASCII码表的扩展,它包含ASCII码表
2.2.2 中文编码值范围(16进制):4eoo ~ 9fa5
3. python使用编码值
3.1 chr函数:chr(编码值) - 获取编码值对应的字符
3.2 ord函数:ord(字符) - 获取指定字符对应的编码值
hex(十进制) - 获取指定的十进制对应的16进制
3.3 编码字符 - 在字符串中用\u4位的16进制数’来表示一个字符
str1 = ‘a\u0061’’
例子:判断x是否是中文
x = '呱'
print('\u4e00' <= x <= '\u9fa5') # True
五、获取字符
1. 查 - 获取元素(字符)
列表获取元素的方法字符串都支持
注意:一个转义字符长度是1,一个空格的长度也是1
2. 字符串相关操作
2.1 +、*
字符串1+字符串2 - 将两个字符串合并成一个字符串
str1 = 'hello'
str2 = 'python'
str3 = str1 + str2
print(str3) # hellopython
字符串N、N字符串 - 将N哥字符串合并成一个字符串
str1 = 'hello'
print(str1*3) # hellohellohello
day8 作业
2.2 比较大小:>、>=、<、<=
两个字符串比较大小,比较的是第一对不相等的字符的编码值的大小
两个字符比较大小,就是比较两个字符的编码值的大小
是否是数字:‘0’ <= x <= ‘9’
是否是小写字母:‘a’ <= x <= ‘z’
是否是字母:‘a’ <= x <= ‘z’ or ‘A’ <= x <= ‘Z’
是否是中文:‘\u4e00’ <= x <= '\u9fa5
3. in 和 not in
字符串1 in 字符串2 - 判断字符串2中是否包含字符串1 (判断字符串1是否是字符串2的字串)
print('a' in 'abc') # True
print('ab' in 'abc') #True
print('ac' in 'abc') # False
-
输入一个字符串,打印所有奇数位上的字符(下标是1,3,5,7…位上的字符)
例如: 输入’abcd1234 ’ 输出’bd24’
str1 = 'abcd1234 ' print(str1[1:-1:2]) # bd24
-
输入用户名,判断用户名是否合法(用户名长度6~10位)
username = input('请输入用户名:''') if 6 <= len(username) <= 10: print('legal') else: print('illegal')
-
输入用户名,判断用户名是否合法(用户名中只能由数字和字母组成)
例如: ‘abc’ — 合法 ‘123’ — 合法 ‘abc123a’ — 合法
username = input('请输入用户名:''')
for x in username:
if 'a' <= x <= 'z' or 'A' <= x <= 'Z' or '0' <= x <= '9':
print('legal')
break
else:
print('illegal')
break
-
输入用户名,判断用户名是否合法(用户名必须包含且只能包含数字和字母,并且第一个字符必须是大写字母)
例如: ‘abc’ — 不合法 ‘Mabc’ — 不合法 ‘123’ — 不合法 ‘abc123’ — 不合法 ‘Abc123ahs’ — 合法
username = input('请输入用户名:''')
if 'A' <= username[0] <= 'Z'
num = 0
for x in username[1:0]:
if not 'a' <= x <= 'z' or 'A' <= x <= 'Z' or '0' <= x <= '9'
print('不合法')
break
elif:
'0' <= x <= '9'
num += 1
else:
if num != 0:
print('合法')
else:
print('不合法')
else:
print('不合法')
-
输入一个字符串,将字符串中所有的数字字符取出来产生一个新的字符串
例如:输入**‘abc1shj23kls99+2kkk’** 输出:‘123992’
str1 = 'abc1shj23kls99+2kkk'
str2 = ''
for x in str1:
if '0'<= x <= '9':
str2 += x
print(str2)
- 输入一个字符串,将字符串中所有的小写字母变成对应的大写字母输出 (用upper方法和自己写算法两种方式实现)
- 例如: 输入**‘a2h2klm12+’ ** 输出 ‘A2H2KLM12+’
str1 = 'a2h2klm12+'
str2 = str1.upper()
print(str2)
# 方法2
str1 = 'a2h2klm12+'
str2 =''
print(str2)
for x in str1:
if 'a' <= x <= 'z':
x = ord(x)
x = x-32
str2 += chr(x)
else:
str2 += x
print(str2)
-
输入一个小于1000的数字,产生对应的学号
例如: 输入**‘23’,输出’py1901023’** 输入**‘9’, 输出’py1901009’** 输入**‘123’,输出’py1901123’**
stu_id = int(input('请输入一个小于1000的数字:'))
if 0 <= stu_id <= 999:
print('学号是:''py',1901000+stu_id,sep='')
else:
print('错误,请输入一个小于1000的数字')
-
输入一个字符串,统计字符串中非数字字母的字符的个数
例如: 输入**‘anc2+93-sj胡说’** 输出:4 输入**‘===’** 输出:3
str1 = str(input('请输入一串字符:'))
count = 0
for x in str1:
if ('a'> x or x > 'z') and ('A' > x or x > 'Z') and ('0' > x or x > '9'):
count += 1
print(count)
-
输入字符串,将字符串的开头和结尾变成’+',产生一个新的字符串
例如: 输入字符串**‘abc123’, 输出’+bc12+'**
str1 = 'abc123'
str2 = ''
l = len(str1)
for x in str1[1:-1]:
str2 += x
print('+'+str2+'+')
-
输入字符串,获取字符串的中间字符
例如: 输入**‘abc1234’** 输出:‘1’ 输入**‘abc123’** 输出**‘c1’**
str1 = 'abc123'
str2 = ''
l = len(str1)
for x in str1:
if len(str1) % 2 == 0:
str2 = str1[l//2-1] + str1[l//2 ]
else:
str2 = str1[l//2 - 1]
print(str2)
-
写程序实现字符串函数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'
i = 0
for index,item in enumerate(str1):
if str2[i] == item:
print(index)
break
else:
i += 1
-
获取两个字符串中公共的字符
例如: 字符串1为:abc123, 字符串2为: huak3 , 打印:公共字符有:a3
str1 = 'abc123'
str2 = 'huak3'
str3 = ''
for x in str1:
for y in str2:
if x == y:
str3 += x
print('公共字符有',str3,sep='')