Python学习第六课-列表

一、序列

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
'''

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MIANHUA_007

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值