一、序列
1.1 概念
- 序列是Python中最基本的一 种数据结构。序列用于保存一 组有序的数据,
所有的数据在序列当中都有一个唯一的位置(索引) 并且序列中的数据会
按照添加的顺序来分配索引 - 数据结构指计算机中数据存储的方式
- 所谓序列,指的是一块可存放多个值的连续内存空间,这些值按一定顺序排列,可通过每个值所在位置的编号(称为索引)访问它们。
- 序列类型包括字符串(str)、列表(list)、元组(tuple)、集合(set)和字典(dic),这些序列支持以下几种通用的操作,但
- 比较特殊的是,集合和字典不支持索引、切片、相加和相乘操作。
- 序列类型非常丰富,包括了列表(list),元组(tuple),字符串(str), 字节数组(bytes),队列(deque)
1.2分类
- 可变序列(序列中的元素可以改变):列表(list)
- 不可变序列(序列中的元素可以改变):字符串(str),元组(tuple)
二、列表
2.1 概念
- 列表是Python中的一个对象
- 列表的作用
- 列表中可以保存多个有序的数据
- 列表是用来存储对象的对象
2.2 练习
- 列表的创建:通过[]来创建空列表
#list=[]
list1=[1,2,3,4,5,6,7,8,9]
str1=123456789
list1=[1,'python',None,False,[],True]
print(list1,type(list1))
print(str1,type(str1))
'''
[1, 'python', None, False, [], True] <class 'list'>
123456789 <class 'int'>
'''
三、切片
3.1 可切片对象的索引方式
包括:正索引和负索引两部分,如下图所示,以list对象a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]为例:
3.2切片操作
切片表达式包含两个“:”,用于分隔三个参数(start_index、end_index、step)。当只有一个“:”时,默认第三个参数step=1;当一个“:”也没有时,start_index=end_index,表示切取start_index指定的那个元素。
object[start_index:end_index:step]
-
step:正负数均可,其绝对值大小决定了切取数据时的‘‘步长”,而正负号决定了“切取方向”,正表示“从左往右”取值,负表示“从右往左”取值。当step省略时,默认为1,即从左往右以步长1取值。
-
start_index:表示起始索引(包含该索引对应值);该参数省略时,表示从对象“端点”开始取值,至于是从“起点”还是从“终点”开始,则由step参数的正负决定,step为正从“起点”开始,为负从“终点”开始。
-
end_index:表示终止索引(不包含该索引对应值);该参数省略时,表示一直取到数据“端点”,至于是到“起点”还是到“终点”,同样由step参数的正负决定,step为正时直到“终点”,为负时直到“起点”。
3.3 练习
list3=['柯南','蜡笔小新','火影忍者','海贼王','奥特曼']
print(list3[1:3])
print(list3[-2])
print(list3[-2][-1])
print(list3[1:3:0])
'''
['蜡笔小新', '火影忍者']
海贼王
王
Traceback (most recent call last):
File "/Users/mianhua/PycharmProjects/python/Python基础/day06/列表.py", line 16, in <module>
print(list3[1:3:0])
ValueError: slice step cannot be zero
'''
四、通用操作
4.1 序列相加以及相乘
# 加法
a =[1,2,3]+[4,5,6]
print(a)
#乘法
b =[1,2,3]*5
print(b)
c =[1,2,3]*[4,5,6]
print(c)
'''
Traceback (most recent call last):
File "/Users/mianhua/PycharmProjects/python/Python基础/day06/通用操作.py", line 12, in <module>
c =[1,2,3]*[4,5,6]
TypeError: can't multiply sequence by non-int of type 'list'
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]
'''
4.2 in和not in
- in 用来检查指定元素是否在列表当中
- not in用来检查指定元素是否不在列表当中
- 描述
in 操作符用于判断键是否存在于列表中,如果键在列表里返回 true,否则返回 false。
而 not in 操作符刚好相反,如果键在列表里返回 false,否则返回 true。 - 语法
in 操作符语法:
key in list
- 参数
key – 要在字典中查找的键。 - 返回值
如果键在字典里返回true,否则返回false。
练习
list1=['柯南','蜡笔小新','火影忍者','海贼王','奥特曼','海贼王']
while True:
a = input('请输入您想看的漫画:')
if a in list1:
print(a,"存在")
else:
print(a,"不存在")
'''
请输入您想看的漫画:柯南
柯南 存在
请输入您想看的漫画:机器猫
机器猫 不存在
请输入您想看的漫画:海贼王
海贼王 存在
请输入您想看的漫画:死神
死神 不存在
请输入您想看的漫画:
'''
4.3 len()获取列表中元素的个数
- 描述
len() 方法返回列表元素个数。 - 语法
len()方法语法:
len(list)
- 参数
list – 要计算元素个数的列表。 - 返回值
返回列表元素个数。
练习
list1 = [1, 2, 3, 4, 5, 6]
print(len(list1))
'''
6
'''
4.4 max()获取列表中最大值
- 描述
max() 方法返回给定参数的最大值,参数可以为序列。 - 语法
max() 方法的语法:
max( x, y, z, .... )
- 参数
x – 数值表达式。
y – 数值表达式。
z – 数值表达式。 - 返回值
返回给定参数的最大值。
练习
list1 = [1, 2, 3, 4]
print(max(list1))
'''
4
'''
4.5 min() 获取列表中最小值
- 描述
min() 方法返回给定参数的最小值,参数可以为序列。 - 语法
以下是 min() 方法的语法:
min( x, y, z, .... )
- 参数
x – 数值表达式。
y – 数值表达式。
z – 数值表达式。 - 返回值
返回给定参数的最小值。
练习
list1 = [1, 2, 3, 4]
print(min(list1))
'''
1
'''
4.6 List index()方法
- 描述
index() 函数用于从列表中找出某个值第一个匹配项的索引位置。 - 语法
index()方法语法:
list.index(x[, start[, end]])
- 参数
x-- 查找的对象。
start-- 可选,查找的起始位置。
end-- 可选,查找的结束位置。 - 要点
-
- 第一个参数获取指定元素在列表中的位置
-
- 第二个参数表示查找的起始位置
-
- 第三个参数表示查找的结束位置
- 返回值
该方法返回查找对象的索引位置,如果没有找到对象则抛出异常。
练习
list1=['柯南','海贼王','火影忍者','海贼王','奥特曼','海贼王','火影忍者']
print ('柯南 索引值为', list1.index('柯南'))
print ('海贼王 索引值为', list1.index('海贼王'))
print ('海贼王 索引值为', list1.index('海贼王',2,5))
print ('柯南 索引值为', list1.find('柯南'))
'''
柯南 索引值为 0
海贼王 索引值为 1
海贼王 索引值为 3
AttributeError: 'list' object has no attribute 'find'
#列表对象没有‘find’属性
'''
4.7 list.count()方法
- 描述
count() 方法用于统计某个元素在列表中出现的次数。 - 语法
count()方法语法:
list.count(obj)
- 参数
obj – 列表中统计的对象。 - 返回值
返回元素在列表中出现的次数。
练习
list1=['柯南','海贼王','火影忍者','海贼王','奥特曼','海贼王','火影忍者']
print ("元素 海贼王 个数是 : ", list1.count('海贼王'))
print ("元素 柯南个数是 : ", list1.count('柯南'))
'''
元素 海贼王 个数是 : 3
元素 柯南个数是 : 1
'''
五、修改列表
5.1 通过索引修改元素
list1=['柯南','蜡笔小新','火影忍者','海贼王','奥特曼','海贼王']
print(list1)
#通过索引来修改原始
list1[5]='死神'
print(list1)
list1[-2]='机器猫'
print(list1)
'''
['柯南', '蜡笔小新', '火影忍者', '海贼王', '奥特曼', '海贼王']
['柯南', '蜡笔小新', '火影忍者', '海贼王', '奥特曼', '死神']
['柯南', '蜡笔小新', '火影忍者', '海贼王', '机器猫', '死神']
'''
5.2 删除功能:del关键字删除
list1=['柯南','蜡笔小新','火影忍者','海贼王','奥特曼','海贼王']
print(list1)
del list1[5]
print(list1)
'''
['柯南', '蜡笔小新', '火影忍者', '海贼王', '奥特曼', '海贼王']
['柯南', '蜡笔小新', '火影忍者', '海贼王', '奥特曼']
'''
list1=['柯南','蜡笔小新','火影忍者','海贼王','奥特曼','海贼王']
print(list1)
del list1[-2]
print(list1)
'''
['柯南', '蜡笔小新', '火影忍者', '海贼王', '奥特曼', '海贼王']
['柯南', '蜡笔小新', '火影忍者', '海贼王', '海贼王']
'''
5.3 通过切片方式修改列表
list1=['柯南','蜡笔小新','火影忍者','海贼王','奥特曼','海贼王']
list1[4::]=123
print(list1)
'''
TypeError: can only assign an iterable
#只能插入一个可迭代的序列
'''
注意:替换的数据必须是一个序列,list,str都可以
list1=['柯南','蜡笔小新','火影忍者','海贼王','奥特曼','海贼王']
list1[4::]=[123]
print(list1)
'''
['柯南', '蜡笔小新', '火影忍者', '海贼王', 123]
'''
list1=['柯南','蜡笔小新','火影忍者','海贼王','奥特曼','海贼王']
list1[4::]='123'
print(list1)
'''
['柯南', '蜡笔小新', '火影忍者', '海贼王', '1', '2', '3']
'''
list1=['柯南','蜡笔小新','火影忍者','海贼王','奥特曼','海贼王']
list1[-1:-3:-1]="abcd"
print(list1)
'''
attempt to assign sequence of size 4 to extended slice of size 2
#出现错误:list1[-1:-3:-1]出现两个位置,但是abcd是四个字符,无法插入2个位置
'''
注意:正向的连续序列可以插入连续序列数量大于取值位置数量
list1=['柯南','蜡笔小新','火影忍者','海贼王','奥特曼','海贼王']
list1[-3:-1]="abcd"
print(list1)
'''
['柯南', '蜡笔小新', '火影忍者', 'a', 'b', 'c', 'd', '海贼王']
'''
list1=['柯南','蜡笔小新','火影忍者','海贼王','奥特曼','海贼王']
list1[1:3]="abcd"
print(list1)
'''
['柯南', 'a', 'b', 'c', 'd', '海贼王', '奥特曼', '海贼王']
'''
#起始位置插入字符串
list1=['柯南','蜡笔小新','火影忍者','海贼王','奥特曼','海贼王']
list1[0:0]='死神'
print(list1)
'''
['死', '神', '柯南', '蜡笔小新', '火影忍者', '海贼王', '奥特曼', '海贼王']
'''
#起始位置插入列表
list1=['柯南','蜡笔小新','火影忍者','海贼王','奥特曼','海贼王']
list1[0:0]=['死神']
print(list1)
'''
['死神', '柯南', '蜡笔小新', '火影忍者', '海贼王', '奥特曼', '海贼王']
'''
list1=['柯南','蜡笔小新','火影忍者','海贼王','奥特曼','海贼王']
list1[::2]=['死神']
print(list1)
'''
ValueError: attempt to assign sequence of size 1 to extended slice of size 3
值错误:序列只有一个值,而替换的位置有三个
'''
list1=['柯南','蜡笔小新','火影忍者','海贼王','奥特曼','海贼王']
list1[::2]='死神'
print(list1)
'''
ValueError: attempt to assign sequence of size 2 to extended slice of size 3
值错误:序列只有2个值,而替换的位置有三个
'''
list1=['柯南','蜡笔小新','火影忍者','海贼王','奥特曼','海贼王']
list1[::2]='死神2'
print(list1)
'''
['死', '蜡笔小新', '神', '海贼王', '2', '海贼王']
'''
li = [1, 2, 3, 4]
# 在头部拼接
li[:0] = [0] # [0, 1, 2, 3, 4]
# 在末尾拼接
li[len(li):] = [5,7] # [0, 1, 2, 3, 4, 5, 7]
# 在中部拼接
li[6:6] = [6] # [0, 1, 2, 3, 4, 5, 6, 7]
# 给切片赋值的必须是可迭代对象
li[-1:-1] = 6 # (报错,TypeError: can only assign an iterable)
li[:0] = (9,) # [9, 0, 1, 2, 3, 4, 5, 6, 7]
li[:0] = range(3) # [0, 1, 2, 9, 0, 1, 2, 3, 4, 5, 6, 7]
六、列表的其他操作
6.1 List append()方法
- 描述
append() 方法用于在列表末尾添加新的对象。 - 语法
append()方法语法:
list.append(obj)
- 参数
obj – 添加到列表末尾的对象。 - 返回值
该方法无返回值,但是会修改原来的列表。
练习
list1=['柯南','蜡笔小新','火影忍者','海贼王','奥特曼','海贼王']
list1.append('死神')
print(list1)
'''
['柯南', '蜡笔小新', '火影忍者', '海贼王', '奥特曼', '海贼王', '死神']
'''
6.2 List insert()方法
- 描述
insert() 函数用于将指定对象插入列表的指定位置。 - 语法
insert()方法语法:
list.insert(index, obj) - 参数
index – 对象 obj 需要插入的索引位置。
obj – 要插入列表中的对象。 - 返回值
该方法没有返回值,但会在列表指定位置插入对象。
练习
list1=['柯南','蜡笔小新','火影忍者','海贼王','奥特曼','海贼王']
list1.insert(4,'死神')
print(list1)
'''
['柯南', '蜡笔小新', '火影忍者', '海贼王', '死神', '奥特曼', '海贼王']
'''
6.3 List extend()方法
- 描述
extend() 函数用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)。 - 语法
extend()方法语法:
list.extend(seq) - 参数
seq – 元素列表。 - 返回值
该方法没有返回值,但会在已存在的列表中添加新的列表内容。
练习
list1=['柯南','蜡笔小新','火影忍者','海贼王','奥特曼','海贼王']
list1.extend(['机器猫','死神'])
print(list1)
'''
['柯南', '蜡笔小新', '火影忍者', '海贼王', '奥特曼', '海贼王', '机器猫', '死神']
'''
6.4 List clear()
- 描述
clear() 函数用于请空列表。 - 语法
clear()方法语法:
list.clear()
- 参数:NA
- 返回值
该方法没有返回值,但是会请空列表。
练习
list1=['柯南','蜡笔小新','火影忍者','海贼王','奥特曼','海贼王']
list1.clear()
print(list1)
'''
[]
'''
6.5 List reverse()方法
- 描述
reverse() 函数用于反向列表中元素。 - 语法
reverse()方法语法:
list.reverse()
- 参数:NA。
- 返回值
该方法没有返回值,但是会对列表的元素进行反向排序。
练习
list1=['柯南','蜡笔小新','火影忍者','海贼王','奥特曼','海贼王']
list1.reverse()
print(list1)
'''
['海贼王', '奥特曼', '海贼王', '火影忍者', '蜡笔小新', '柯南']
'''
6.6 List sort()方法
- 描述
sort() 函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数。 - 语法
sort()方法语法:
list.sort(cmp=None, key=None, reverse=False) - 参数
– cmp:可选参数, 如果指定了该参数会使用该参数的方法进行排序。
— key:主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
– reverse:排序规则,reverse = True 降序, reverse = False 升序(默认)。 - 返回值
该方法没有返回值,但是会对列表的对象进行排序。
练习
list3=[1,9,10,4,6]
list3.sort()
print(list3)
list3.sort(reverse=True)##降序
print(list3)
'''
[6, 5, 4, 3, 2, 1]
[1, 4, 6, 9, 10]
[10, 9, 6, 4, 1]
'''
6.7 List pop()方法
- 描述
pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。 - 语法
pop()方法语法:
list.pop([index=-1])
- 参数
obj – 可选参数,要移除列表元素的索引值,不能超过列表总长度,默认为 index=-1,删除最后一个列表值。 - 返回值
该方法返回从列表中移除的元素对象。
练习
list1=['柯南','蜡笔小新','火影忍者','海贼王','奥特曼','海贼王']
list_pop=list1.pop()
print("删除的项为 :",list_pop)
print("列表现在为 : ",list1)
'''
删除的项为 : 海贼王
列表现在为 : ['柯南', '蜡笔小新', '火影忍者', '海贼王', '奥特曼']
'''
list1=['柯南','蜡笔小新','火影忍者','海贼王','奥特曼','海贼王']
list_pop=list1.pop(1)
print("删除的项为 :",list_pop)
print("列表现在为 : ",list1)
'''
删除的项为 : 蜡笔小新
列表现在为 : ['柯南', '火影忍者', '海贼王', '奥特曼', '海贼王']
'''
6.8 List remove()方法
- 描述
remove() 函数用于移除列表中某个值的第一个匹配项。 - 语法
remove()方法语法:
list.remove(obj)
- 参数
obj – 列表中要移除的对象。 - 返回值
该方法没有返回值但是会移除列表中的某个值的第一个匹配项。
练习
list1=['柯南','蜡笔小新','火影忍者','海贼王','奥特曼','海贼王']
list1.remove('海贼王');
print(list1)
list1.remove('蜡笔小新');
print(list1)
'''
['柯南', '蜡笔小新', '火影忍者', '奥特曼', '海贼王']
['柯南', '火影忍者', '奥特曼', '海贼王']
'''
七、 range函数和for循环
range函数
- 描述
range() 返回的是一个可迭代对象(类型是对象),而不是列表类型, 所以打印的时候不会打印列表。
-语法
range(start, stop[, step])
- 参数:
– start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
– stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
– step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1) - 要点
– 取头不取尾#range(开始数据,结束数据,步长) 取头不取尾 左闭右
–开头可以省略 缺省0,结尾不能省略,步长可以省略,默认1
练习
a=range(0,10,2)
print(a)
b=range(10)
print(b)
for i in range(0,10):
print(i,end="\t")
print()
for i in range(0,10,2):
print(i,end="\t")
'''
range(0, 10, 2)
range(0, 10)
0 1 2 3 4 5 6 7 8 9
0 2 4 6 8
'''
for 循环语句
- 描述
for循环可以遍历任何序列的项目,如一个列表或者一个字符串。 - 语法:
#for变量 in序列(遍历的规则)
for循环的语法格式如下:
for iterating_var in sequence:
statements(s)
- 流程图:
练习
list1=['柯南','蜡笔小新','火影忍者','海贼王','奥特曼','海贼王']
i=0
while i< (len(list1)):
print(list1[i])
i+=1
'''
柯南
蜡笔小新
火影忍者
海贼王
奥特曼
海贼王
'''
For循环不能进行 删除操作
控制循环次数用wehile
注意:: for循环的代码块会执⾏多次,序列中有⼏个元素就会执⾏⼏次。每执⾏⼀次就会将序列中的⼀个元素赋值给变量,所以我们可以通过变量来获取列表中的元素
八、作业
8.1 列表反转
现在有a = [1,2,3,4,5,6]用多种方式实现列表的反转([6,5,4,3,2,1)并写出推导过程
#方法一,list.reverse()列表反转
a = [1,2,3,4,5,6]
a.reverse()
print(a)
'''
[6, 5, 4, 3, 2, 1]
'''
#方法二,list.sort(reverse=True)列表降序排列
a = [1,2,3,4,5,6]
a.sort(reverse=True)
print(a)
'''
[6, 5, 4, 3, 2, 1]
'''
#方法三,list[::-1]列表负索引切片
a = [1,2,3,4,5,6]
print(a[::-1])
'''
[6, 5, 4, 3, 2, 1]
'''
#方法四 list(reversed(x))函数返回一个反转的迭代器,调用时需要使用list()
a = [1,2,3,4,5,6]
print(list(reversed(a)))
'''
[6, 5, 4, 3, 2, 1]
'''
#方法五,自定义函数,逆索引取值,循环加入列表
a = [1,2,3,4,5,6]
def reverse_list1(x):
ret_list1=[]
i=1
while i <= len(x):
ret_list1.append(x[-i])
i += 1
return ret_list1
print(reverse_list1(a))
'''
[6, 5, 4, 3, 2, 1]
'''
#方法六:自定义函数,数学算法
a = [1,2,3,4,5,6]
def reverse_list2(x):
ret_list=[]
i=0
while i < len(x):
ret_list.append(max(x)+min(x)-x[i])
i += 1
return ret_list
print(reverse_list2(a))
'''
[6, 5, 4, 3, 2, 1]
'''
8.2 猜数字
2.给用户9次机会猜1 - 10个数字随机来猜数字,如果随机的数字和用户输入的数字一致则表示正确,如果不一致则表示错误,最终结果要求用户怎么也猜不对
import random
i=0
list1=[1,2,3,4,5,6,7,8,9,10]
while i<9:
if i==0:
print('1-10 猜数字游戏,您有9次机会')
else:
print('您还有{}次机会'.format(9-i))
i += 1
player=int(input("请在1-10内选一个数字输入:"))
list1.remove(player)
computer=random.choice(list1)
print('不好意思,您猜错了,加油哦')
print('---------------------')
print('计算机选择的时:{}'.format(list1[0]))
'''
1-10 猜数字游戏,您有9次机会
请在1-10内选一个数字输入:10
不好意思,您猜错了,加油哦
---------------------
您还有8次机会
请在1-10内选一个数字输入:9
不好意思,您猜错了,加油哦
---------------------
您还有7次机会
请在1-10内选一个数字输入:7
不好意思,您猜错了,加油哦
---------------------
您还有6次机会
请在1-10内选一个数字输入:5
不好意思,您猜错了,加油哦
---------------------
您还有5次机会
请在1-10内选一个数字输入:4
不好意思,您猜错了,加油哦
---------------------
您还有4次机会
请在1-10内选一个数字输入:3
不好意思,您猜错了,加油哦
---------------------
您还有3次机会
请在1-10内选一个数字输入:2
不好意思,您猜错了,加油哦
---------------------
您还有2次机会
请在1-10内选一个数字输入:1
不好意思,您猜错了,加油哦
---------------------
您还有1次机会
请在1-10内选一个数字输入:8
不好意思,您猜错了,加油哦
---------------------
计算机选择:6
'''
#另一种理解
import random
i=0
while i<9:
if i==0:
print('猜数字游戏,您有9次机会')
else:
print('您还有{}次机会'.format(9-i))
i += 1
player=int(input("请在1-10内选一个数字输入:"))
list1=[1,2,3,4,5,6,7,8,9,10]
list1.remove(player)
computer=random.choice(list1)
print('计算机选择:{}'.format(computer))
print('不好意思,您猜错了,加油哦')
print('---------------------')
'''
猜数字游戏,您有9次机会
请在1-10内选一个数字输入:1
计算机选择:2
不好意思,您猜错了,加油哦
---------------------
您还有8次机会
请在1-10内选一个数字输入:2
计算机选择:9
不好意思,您猜错了,加油哦
---------------------
您还有7次机会
请在1-10内选一个数字输入:3
计算机选择:10
不好意思,您猜错了,加油哦
---------------------
您还有6次机会
请在1-10内选一个数字输入:5
计算机选择:8
不好意思,您猜错了,加油哦
---------------------
您还有5次机会
请在1-10内选一个数字输入:6
计算机选择:1
不好意思,您猜错了,加油哦
---------------------
您还有4次机会
请在1-10内选一个数字输入:7
计算机选择:8
不好意思,您猜错了,加油哦
---------------------
您还有3次机会
请在1-10内选一个数字输入:8
计算机选择:3
不好意思,您猜错了,加油哦
---------------------
您还有2次机会
请在1-10内选一个数字输入:9
计算机选择:1
不好意思,您猜错了,加油哦
---------------------
您还有1次机会
请在1-10内选一个数字输入:1
计算机选择:10
不好意思,您猜错了,加油哦
---------------------
'''
8.3获取内容相同的元素
有两个列表list1 = [11,22,33],list2 = [22,33,44]获取内容相同的元素
#方法一:while循环
list1 = [11,22,33]
list2 = [22,33,44]
list3 =[]
i=0
while i<len(list1):
if list1[i] in list2:
list3.append(list1[i])
i+=1
print(list3)
'''
[22, 33]
'''
#方法二:for循环
list1 = [11,22,33]
list2 = [22,33,44]
list3 =[]
for i in list1:
if i in list2:
list3.append(i)
print(list3)
'''
[22, 33]
'''
#方法三:转化为集合,求交集
list1 = [11,22,33]
list2 = [22,33,44]
set1 = set(list1)
set2 = set(list2)
set3 = set1&set2
list3 = list(set3)
list3.reverse()
print(list3)
'''
[22, 33]
'''
8.4 教师分配
4、现在有8位老师,3个办公室,要求将8位老师随机的分配到三个办公室中
import random
teacher=[]
teacher[::]="赵钱孙李周吴郑王"
i=0
while i<9:
room= [[], [], []]
for name in teacher:
num = random.randint(0, 2)
room[num].append(name)
print('第{}次随机分配'.format(i+1))
print(room)
print('--------------')
i+=1
'''
第1次随机分配
[['赵', '孙', '李'], ['钱', '吴', '郑', '王'], ['周']]
--------------
第2次随机分配
[['吴'], ['钱', '孙'], ['赵', '李', '周', '郑', '王']]
--------------
第3次随机分配
[['李', '郑'], ['赵', '周', '吴'], ['钱', '孙', '王']]
--------------
第4次随机分配
[[], ['孙', '李', '郑', '王'], ['赵', '钱', '周', '吴']]
--------------
第5次随机分配
[['赵', '周', '王'], ['钱', '李', '吴', '郑'], ['孙']]
--------------
第6次随机分配
[['钱', '孙', '吴'], ['周', '郑', '王'], ['赵', '李']]
--------------
第7次随机分配
[['钱', '孙', '郑', '王'], ['赵', '周'], ['李', '吴']]
--------------
第8次随机分配
[['赵', '李', '周', '郑'], ['钱', '王'], ['孙', '吴']]
--------------
第9次随机分配
[['李', '吴'], ['赵', '钱', '周', '郑'], ['孙', '王']]
--------------
'''
8.5 教师分配升级版
5.现在有8位老师,3个办公室,要求将8位老师随机的分配到三个办公室中,要求,每个办公室至少有一位老师。
import random
teacher=[]
teacher[::]="赵钱孙李周吴郑王"
i=0
while i<10:
room= [[], [], []]
for name in teacher:
num = random.randint(0, 2)
room[num].append(name)
if room[0]==[] or room[1]==[] or room[2]==[]:#判断如果三个教室中有任何一个空教室
continue#跳过循环
print('第{}次随机分配'.format(i+1))
print(room)
print('--------------')
i+=1
import random
i=0
while i<10:
teachers=[1,2,3,4,5,6,7,8]
offices = [[], [], []]
for teacher in teachers:
num = random. randint(0, 2)
offices[num].append(teacher)
if len(offices[0]) == 0 or len(offices[1]) == 0 or len(offices[2]) == 0:
continue
else :
print (offices)
i+=1
#伪随机分配(前三次分配固定了)
import random
teacher=[]
teacher[::]="赵钱孙李周吴郑王"
i=0
while i<9:
room= [[], [], []]
t_time=0
for name in teacher:
if t_time<=2:
room[t_time].append(name)
else:
num = random.randint(0, 2)
room[num].append(name)
t_time+=1
print('第{}次随机分配'.format(i+1))
print(room)
print('--------------')
i+=1
'''
第1次随机分配
[['赵'], ['钱', '李', '周', '吴', '郑', '王'], ['孙']]
--------------
第2次随机分配
[['赵', '李', '吴', '王'], ['钱', '周'], ['孙', '郑']]
--------------
第3次随机分配
[['赵', '周'], ['钱', '李', '吴', '郑', '王'], ['孙']]
--------------
第4次随机分配
[['赵', '郑'], ['钱', '周', '吴'], ['孙', '李', '王']]
--------------
第5次随机分配
[['赵', '李', '周'], ['钱', '王'], ['孙', '吴', '郑']]
--------------
第6次随机分配
[['赵', '周', '吴', '郑'], ['钱', '李'], ['孙', '王']]
--------------
第7次随机分配
[['赵', '李', '郑', '王'], ['钱', '吴'], ['孙', '周']]
--------------
第8次随机分配
[['赵', '吴', '郑'], ['钱', '李', '王'], ['孙', '周']]
--------------
第9次随机分配
[['赵', '王'], ['钱', '周', '吴', '郑'], ['孙', '李']]
--------------
'''
8.6 账号密码验证
6.要求从键盘输入用户名和密码,校验格式是否符合规则,如果不符合,打印出不符合的原因,并提示重新输入
-用户名长度6-20,用户名必须以字母开头
-密码长度至少6位,不能为纯数字,不能有空格
#第一版
def user_check():
global user_name
user_name=input('请输入用户名:')
#print(user_name[0].encode())
#print(user_name[0].encode().isalpha())
if 6<=len(user_name)<=20 and user_name[0].encode().isalpha():
pw_check()
else:
print('用户名长度限制6-20,并且首字母必须为字母,请重新输入')
user_check()
def pw_check():
global user_pw
user_pw=input('请输入密码:')
if len(user_pw)<6 or user_pw.isdigit() or ' ' in user_pw:
print('密码长度至少6位,不能为纯数字,不能有空格,请重新输入')
pw_check()
else:
print('恭喜您,注册成功!\n您的用户名是:{},密码是:{}'.format(user_name,user_pw))
user_check()
#第二版 升级
def user_check():
global user_name
user_name=input('请输入用户名:')
#print(user_name[0].encode())
#print(user_name[0].encode().isalpha())
if len(user_name) not in range(6, 21):
print('用户名长度限制6-20,请重新输入')
user_check()
elif user_name[0].encode().isalpha() == False:
print('首字母必须为字母,请重新输入')
user_check()
else:
pw_check()
def pw_check():
global user_pw
user_pw=input('请输入密码:')
if len(user_pw) <6:
print('密码长度至少6位,请重新输入')
pw_check()
elif user_pw.isdigit():
print('密码不能为纯数字,请重新输入')
pw_check()
elif ' ' in user_pw:
print('密码不能有空格,请重新输入')
pw_check()
else:
print('恭喜您,注册成功!\n您的用户名是:{},密码是:{}'.format(user_name,user_pw))
user_check()
'''
请输入用户名:12345
用户名长度限制6-20,请重新输入
请输入用户名:123456
首字母必须为字母,请重新输入
请输入用户名:a123456789a1234567891
用户名长度限制6-20,请重新输入
请输入用户名:张占华张占华
首字母必须为字母,请重新输入
请输入用户名:zhangzhanhua
请输入密码:12345
密码长度至少6位,请重新输入
请输入密码:123456
密码不能为纯数字,请重新输入
请输入密码:1 2345678
密码不能有空格,请重新输入
请输入密码:a123456
恭喜您,注册成功!
您的用户名是:zhangzhanhua,密码是:a123456
'''