1)什么是元组(tuple)(元组的不可变的列表)
是容器型数据;将()作为容器的标志,里面有多个元素用逗号隔开:(元素1,元素2,元素3,…)
1 元组不可变的(只支持查,不支持增删改)
2有序的(直接下标操作)
3:任何操作
空元组:t1 =()无意义
只有一个元素的元组(重点!)
t2=(100,) ,必须有
注 :在没有歧义的情况下,元组的()可以省略 - 直接将多个数据用逗号隔开,表示的是一个元组
t2=(100)
print(t2,type(t2)) #100
t1=(100,)
print(t1,type(t1)) #(100,)
支持查,切片,求和,求最大,sorted(对原列表没修改),count
应用:当要求数据不可变时(如星期)
1集合是容器;用{}作为容器的标志,里面多个元素用逗号隔开:{元素1,元素2,元素3,…}
2集合是可变的;
3集合是无序的
4元素的要求:和字典对键的要求一样(不可变的数据;唯一的)
集合的空集合
s1=set()
s1={} #空字典
s1=set()
print(type(s1),len(s1)) # 0
#集合元素是不可变数据
s2={10,'abc',(1,2)} #正确
s3={10,'abc',[1,2]} #报错 [1,2]可变数据
#集合元素是唯一的 - 去重
s3=[10,20,40,10,20,10]
print(set(s3)) #{40, 10, 20}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gs7aWMNZ-1650543595493)(C:\Users\86567\AppData\Roaming\Typora\typora-user-images\image-20220421111324579.png)]
s1={1,2,3,4,5,6,7}
s2={5,6,7,8,9,10}
print(s1&s2) #{5, 6, 7}
print(s1|s2) #{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
print(s1-s2) #{1, 2, 3, 4}
print(s2-s1) #{8, 9, 10}
print(s2^s1) #{1, 2, 3, 4, 8, 9, 10}
1 > 、<判断一个集合是不是另一个的真子集(真子集不包括本身)
2= 是否相等
1字符串是容器型数据类型
2将’‘、“”、’‘’ ‘’'、“”" “”"作为容器的标志,引号中的每个符号就是字符串的元素
3字符串是不可变的;(任何对字符串的修改操作都是重新产生一个字符串)
4字符串是有序的,支持下标操作
5元素:引号中的每个符号就是字符串的元素,字符串的元素又叫字符,任何可以写进引号内的都可以
字符可以分为普通字符和转义字符两种!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dBcYwcJJ-1650543595495)(C:\Users\86567\AppData\Roaming\Typora\typora-user-images\image-20220421114039284.png)]
注:三个单引号和三个双引号只有放在具体位置才是注释(变灰)(py文件开头,函数开头,类开头)
其他地方变绿的对程序几乎无影响
三个单引号或者三个双引号想要数据内换行直接换行就行,单引号或双引号必须用转义字符才能换行
多行字符串 - 三个引号开头的字符串,字符串内容可以直接按回车换行
str1='abc红色经理mn*...'
str2='abc'
str3="abc"
str4='''abc'''
str5="""abc"""
4)空字符串
str1='' #引号内必须什么没有
str1=' '
print(str1) #1
1)普通字符 - 在字符串中表示符号本身的字符就是普通字符
2)转义字符 - 在特定的符号前面加\来表示特殊功能或特殊意义的符号
转义字符 | 表示意义 |
---|---|
\t | 水平制表符(相当于按一个tab键) |
\n | 换行 |
\’ | 表示一个普通的单引号 |
\" | 表示一个普通的双引号 |
\\ | 表示一个普通的反斜杠 |
print('a8*开始')
print('\tabc\n123')
# abc
123
print('it\'s me') #it's me
print("it's me") #it's me
print('\\tabc\\n123') #\tabc\n123
字符串的最前面可以加r或R,让字符串中所有的转义字符功能消失,所有的符号都变成普通字符:r、R
str1='\tabc\n123\u4e00'
print(str1)
# abc
#123一
str1=R'\tabc\n123\u4e00' #\tabc\n123\u4e00
计算器在存储数据时只能存数字,而且存的是数字的补码
78 -> 01001110(源码) -> 00110001(反码) ->00110010(补码)
-78 -> 11001110(源码) -> 10110001(反码) ->10110010 (补码)
字符串存储时:
字符编码:为了能够让计算机保存文字符号,我们给每一个符号对应了一个固定数字,在存储符号的时候就保存这个符号对应的数字
1)ASCII码表:只保存了128个字符的编码(通过1个字节来对128个字符进行编码,里面的字符是美国通用的符号。数字在大写字母的前面、大写字母在小写字母前面、大写字母和小写字母之间有间隙(A-65;a-97)
2)unicode编码表(python用的编码表):又叫万国码、统一码(包含了世界上所有的国家所有民族的所有的语言的符号)
a. unicode码是ASCII码表的扩展,它包含ASCII码表
b.中文编码值范围:4e00(一)~9fa5
3)python使用编码表
1 chr函数:chr(编码值) - 获取编码值对应的字符
注意:如果想在程序中直接使用16进制数,数字前必须加前缀’0x’或’0X’
hex(十进制数) - 获取指定十进制对应的16进制
2 ord函数:ord(字符) - 获取指定字符对应的编码值
3 编码字符:在字符串中用’\u4位的16进制数’来表示一个字符
应用:判断一个字符是不是汉字
print(chr(97)) #A
print(chr(65)) #a
print(hex(ord('张')),hex(ord('云')),hex(ord('川')))
str1='a\u0061一\u4e00'
print(str1)
#判断x是否为中文
x='9'
print('\u4e00'<=x<='\u9fa5') #False
print('一'<=x<='龥') #False
1查 - 获取元素(字符)
列表获取元素的方法字符串都支持
1)取单个字符
字符串[下标]
注意:一个转义字符长度是1,一个空格的长度也是1
2)取多个字符
切片
字符串[开始下标:结束下标:步长]
3)遍历
for 变量 in range()
for 变量1,变量2 in enumerate()
str1='hello world!'
print(str1[1]) #'e'
print(str1[-1])
print(str1[1:])
2 相关操作
1)+、*
字符串1+字符串2 - 将两个字符串合并成一个字符串
字符串*N - 将N个字符串合并成一个字符串
str1='hello'
str2='python'
print(str1+str2) #hellopython
2)比较大小:>、>=、<、<=
两个字符串比较大小比较的是第一对不相等的字符的编码值的大小
print('abc'<'1234567890') #False
#练习1:已知一个字符串,统计字符串中数字字符的个数
#练习2:已知一个字符串,提取字符串中所有的中文字符
str1='abc1123你好110'
str2='ab啊c1123你好110是-2=2'
3)in和not in
字符串1 in 字符串2 - 判断字符串2中是否包含字符串1(判断字符1是否是字符串2的子串)
输入一个字符串,打印所有奇数位上的字符(下标是1,3,5,7…位上的字符)
例如: 输入’abcd1234 ’ 输出’bd24’
str1='abcd1234'
for x,y in enumerate(str1):
if x%2:
print(y,end='')
输入用户名,判断用户名是否合法(用户名长度6~10位)
str1=input('输入用户名')
sum=0
for x in str1:
sum+=1
if 6<=sum<=10:
print('用户名合法')
else:
print('用户名不合法')
输入用户名,判断用户名是否合法(用户名中只能由数字和字母组成)
例如: ‘abc’ — 合法 ‘123’ — 合法 ‘abc123a’ — 合法
str1=input('输入用户名')
for x in str1:
if '0'<=x<='9' or 'a'<=x<'z' or 'A'<=x<='Z':
continue
else:
print('用户名不合法')
break
else:
print('用户名合法')
输入用户名,判断用户名是否合法(用户名必须包含且只能包含数字和字母,并且第一个字符必须是大写字母)
例如: ‘abc’ — 不合法 ‘Mabc’ — 不合法 ‘123’ — 不合法 ‘abc123’ — 不合法 ‘Abc123ahs’ — 合法
str1=input('输入用户名')
if 'A'<=str1[0]<='Z':
for x in str1:
if '0'<=x<='9' or 'a'<=x<'z' or 'A'<=x<='Z':
continue
else:
print('用户名不合法')
break
else:
print('用户名合法')
else:
print('输入用户不合法')
输入一个字符串,将字符串中所有的数字字符取出来产生一个新的字符串
例如:输入**‘abc1shj23kls99+2kkk’** 输出:‘123992’
str1='abc1shj23kls99+2kkk'
str_new=''
for x in str1:
if '0'<=x<='9':
str_new+=x
print(str_new)
输入一个字符串,将字符串中所有的小写字母变成对应的大写字母输出 (用upper方法和自己写算法两种方式实现)
例如: 输入**‘a2h2klm12+’ ** 输出 ‘A2H2KLM12+’
str1='a2h2klm12+'
str_new=''
for x in str1:
if 'a'<=x<='z':
x=chr(ord(x)-32)
str_new+=x
输入一个小于1000的数字,产生对应的学号
例如: 输入**‘23’,输出’py1901023’** 输入**‘9’, 输出’py1901009’** 输入**‘123’,输出’py1901123’**
str1=input('输入小于1000的整数')
str2='py1901000'
result_1=str2[0:9-len(str1)]
result=result_1+str1
print(result)
输入一个字符串,统计字符串中非数字字母的字符的个数
例如: 输入**‘anc2+93-sj胡说’** 输出:4 输入**‘===’** 输出:3
str1='anc2+93-sj胡说'
count=0
for x in str1:
if 'a'<=x<='z' or 'A'<=x<='Z' or '0'<=x<='9':
continue
else:
count+=1
print(count)
输入字符串,将字符串的开头和结尾变成’+',产生一个新的字符串
例如: 输入字符串**‘abc123’, 输出’+bc12+'**
str='abc123'
print('+'+str[1:-1]+'+')
输入字符串,获取字符串的中间字符
例如: 输入**‘abc1234’** 输出:‘1’ 输入**‘abc123’** 输出**‘c1’**
str1='abc1234'
l=len(str1)
if l%2:
print(str1[l//2])
else:
print(str1[l//2-1]+str1[l//2])
写程序实现字符串函数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=1
for x in str1:
str3=str1[0:i]
if str2 in str3:
print(i-len(str2))
break
else:
i=i+1
获取两个字符串中公共的字符
例如: 字符串1为:abc123, 字符串2为: huak3 , 打印:公共字符有:a3
#方法1
str1='abc123'
str2='huak3'
s1=set(str1)
s2=set(str2)
print(s1&s2)
#方法2
str1='abc123'
str2='huak3'
s=''
for x in str1:
if x in str2 and x not in s:
s+=x
print(s)
if str2 in str3:
print(i-len(str2))
break
else:
i=i+1
```
获取两个字符串中公共的字符
例如: 字符串1为:abc123, 字符串2为: huak3 , 打印:公共字符有:a3
#方法1
str1='abc123'
str2='huak3'
s1=set(str1)
s2=set(str2)
print(s1&s2)
#方法2
str1='abc123'
str2='huak3'
s=''
for x in str1:
if x in str2 and x not in s:
s+=x
print(s)