字典,元组和集合的内置方法

字典内置方法

  
  1.类型转换
    dict()
  2.按key进行取值
    dic = {
    'name': '春游去动物园',
    'age': 20,
    'hobby': 'play',
    }
    print(dic['name'])  # 春游去动物园

  3.修改值
    dic['name'] = '秋游去动物园'
    print(dic['name'])  # 秋游去动物园

  4.添加键值对
    dic['tel'] = '10086'
    print(dic)  # {'name': '春游去动物园', 'age': 20, 'hobby': 'play', 'tel': '10086'}
    键不存在则是新增一个键值对,如存在就是修改原有的V。

  5.字典中键值对的个数
    print(len(dic))  # 3

  6.成员运算 (key)
    print('age' in dic)  # True
    print('111' in dic)  # False

  7.删除键值对
    通用的删除方法
    del dic['name']
    print(dic)  # {'age': 20, 'hobby': 'play'}

    pop弹出
    print(dic.pop('name'))  # 春游去动物园
    print(dic)  # {'age': 20, 'hobby': 'play'}

    popitem()随机弹出一个
    dic.popitem()
    print(dic)  # {'name': '春游去动物园', 'age': 20}

   8.获取所有的key 所有的values 所有的键值对
    print(dic.keys())  # dict_keys(['name', 'age', 'hobby'])可以看成是列表
    print(dic.values())  # dict_values(['春游去动物园', 20, 'play'])可以看成是列表
    print(dic.items())  # dict_items([('name', '春游去动物园'), ('age', 20), ('hobby', 'play')])可以看成是列表套元组

需要了解的内容

   1.update更新字典
   dic = {'k1': 'jason', 'k2': 'Tony', 'k3': 'JY'}
   dic.update({'k1': 'JN', 'k4': 'xxx'})
   print(dic)  # 键存在则修改 键不存在则新增
   2.fromkeys()快速生成字典
   dic = dict.fromkeys(['k1', 'k2', 'k3'], [])
   print(dic)  # {'k1': [], 'k2': [], 'k3': []}
   ps:此时所有key的索引都指向同一个空[]。

  """笔试题"""
   dic = dict.fromkeys(['k1', 'k2', 'k3'], [])
   dic['k1'].append(111)  # 三个键指向的是同一个列表
   print(dic)  # {'k1': [111], 'k2': [111], 'k3': [111]}
   3.setdefault()
   dic = {'k1': 111, 'k2': 222}
   print(dic.setdefault('k3', 333))  # 键不存在则新增键值对 并且有返回结果是新增的v
   print(dic.setdefault('k1', '嘿嘿嘿'))  # 键存在 则返回对应的值 不做修改

元组内置方法

  1.类型转换
    支持for循环的数据类型都可以转成元组
    print(tuple(11))  # 报错
    print(tuple(11.11))  # 报错
    print(tuple('春游去动物园'))
    print(tuple([11,22,33,44]))
    print(tuple({'name':'春游去动物园'}))
    print(tuple({11,22,33,44}))
    print(tuple(True))  # 报错

  2.元组的特性
    t = (1, 2, 3, 4)
    print(type(t))  # <class 'tuple'>
    t1 = (1)
    print(type(t1))  # <class 'int'>
    t2 = (2.2)
    print(type(t2))  # <class 'float'>
    t3 = ('春游去动物园')
    print(type(t3))  # <class 'str'>
    """当元组内只有一个元素的时候 一定要在元素的后面加上逗号"""
    t1 = (1,)
    print(type(t1))  # <class 'tuple'>
    t2 = (2.2,)
    print(type(t2))  # <class 'tuple'>
    t3 = ('春游去动物园',)
    print(type(t3))  # <class 'tuple'>
    """
    一般情况下 我们会习惯性的将所有可以存储多个数据的类型的数据
    如果内部只有一个元素 也会加逗号
        (1,)
        [1,]
        {1,}
        {'name':'jason',}
    """

  3.索引取值,切片操作,间隔
    t = (1, 2, 3, 4)
    print(t[1]) 

    print(t[0 : 2])
    print(t[0 : 2 : -1])

    print(t[0 : 2 : 2])

  4.统计元组内的元素个数
    t = (1, 2, 3, 4)
    print(len(t)) # 4
  
  5.成员运算
    t = (1, 2, 3, 4)
    print(1 in t) # True

  6.统计某个元素出现的次数
    t = (1, 2, 3, 4)
    print(t.count(1)) # 1

  7.元组内元素不能"修改": 元组内各个索引值指向的内存地址不能修改
    """
    笔试题
        tt = (11, 22, 33, [11, 22])
        tt[-1].append('heiheihei')
        问:执行之后的结果   正确答案选B
            A.报错    B.正常添加   C.不知道 
        tt = (11, 22, 33, [11, 22,'heiheihei'])  
    """
    tt = (11, 22, 33, [11, 22])
    print(id(tt[-1]))
    tt[-1].append('heiheihei')
    print(id(tt[-1]))
    print(tt)

集合内置方法

  1.类型转换
    # print(set(11))  # 报错
    # print(set(11.11))  # 报错
    # print(set('春游去动物园'))
    # print(set([11,22,33,44]))
    # print(set({'name':'春游去动物园'}))
    # print(set((11,22,33)))
    # print(set(True))  # 报错
    """集合内元素只能是不可变类型"""
  2.两大功能
    1.去重
    	集合内不能出现重复的元素(自带去重特性)
        如果出现了 会被集合自动去重
    2.关系运算
    	判断两个群体内的差异	

      去重:
        s1 = {1,1,1,1,1,1,2,2,2,2,2,1,2,3,2,2,1,2,3,2,3,4,3,2,3}
        print(set(s1))  # {1, 2, 3, 4}

  3.关系运算
    f1 = {10, 20, 40, 50, 100}
    f2 = {0, 10, 30, }
    # 1.交集
    print(f1 & f2)  # {10}
    # 2.差集
    print(f1 - f2)  # {40, 50, 100, 20}
    # 3.并集
    print(f1 | f2)  # {0, 50, 100, 20, 40, 10, 30}
    # 4.除了交集,剩下的元素
    print(f1 ^ f2)  # {0, 100, 40, 50, 20, 30}

垃圾回收机制

"""python底层针对空间的申请和释放都是设计好的 不需要程序员操心"""
垃圾收集机制的原理:
垃圾收集器会按照固定的时间间隔,周期性的找出不再继续使用的变量,然后释放其占用的内存。
1.引用计数
	python会将引用计数为0的数据清除
    	name = 'jason'  # jason引用计数为1
        a = name        # jason引用计数为2
        '''内存中数据身上绑定的变量名的个数'''
        # ps:还可以了解一下循环引用的情况
2.标记清除
	当内存空间即将溢出(满了)的时候 python会自动启动应急机制
    停止程序的运行 挨个检查值的引用计数并给计数为0的数据打上标记
    然后一次性清理掉
3.分代回收
	根据值存在的时间长短 将值划分为三个等级(1,2,3)
    	等级1 检测机制每隔5s来一次
        等级2 检测机制每隔1min来一次
        等级3 检测机制每隔5min来一次

今日作业

1.去重列表元素并保留原来的顺序
    l = ['a', 'b', 1, 'a', 'a']

    第一种:
    l = ['a', 'b', 1, 'a', 'a']
    l1 = []
    for i in l:
      if i not in l1:
          l1.append(i)
    print(l1)  #  ['a', 'b', 1]
    第二种:
    l = ['a', 'b', 1, 'a', 'a']
    l1 = list(set(l))
    l1.sort(key=l.index)
    print(l1)  #  ['a', 'b', 1]

2.去重下列数据字典并保留原来的顺序
    # 针对不可变类型,并且保证顺序则需要我们自己写代码实现,例如
l=[
{'name':'lili','age':18,'sex':'male'},
{'name':'jack','age':73,'sex':'male'},
{'name':'tom','age':20,'sex':'female'},
{'name':'lili','age':18,'sex':'male'},
{'name':'lili','age':18,'sex':'male'},
]

    l1 = []
    for i in l:
        if i not in l1:
            l1.append(i)
    print(l1) # [{'name': 'lili', 'age': 18, 'sex': 'male'}, {'name': 'jack', 'age': 73, 'sex': 'male'}, {'name': 'tom', 'age': 20, 'sex': 'female'}]

3.一.关系运算
       有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合
  pythons={'jason','oscar','kevin','ricky','gangdan','biubiu'}
  linuxs={'oscar','tony','gangdan'}

    pythons = {'jason', 'oscar', 'kevin', 'ricky', 'gangdan', 'biubiu'}
    linuxs = {'oscar', 'tony', 'gangdan'}

  1. 求出即报名python又报名linux课程的学员名字集合
    print(pythons & linuxs)  # {'gangdan', 'oscar'}

  2. 求出所有报名的学生名字集合
    print(pythons | linuxs)  # {'biubiu', 'oscar', 'tony', 'gangdan', 'jason', 'kevin', 'ricky'}

  3. 求出只报名python课程的学员名字
    print(pythons - linuxs)  # {'kevin', 'jason', 'biubiu', 'ricky'}

  4. 求出没有上这两门课程的学员名字集合
    print((pythons | linuxs) - (pythons & linuxs))  # {'ricky', 'tony', 'jason', 'biubiu', 'kevin'}

大作业(学生管理系统)

身份不同,进入不同的界面,同样的可以进行的操作也不同。

管理员账号:可以进行所有操作。(账号:admin 密码:123)

老师:修改密码,修改姓名,查看自己信息,查看所有信息,删除数据(但是不能删除同为老师身份的数据)

学生:修改密码,修改姓名,查看自己信息,查看所有姓名

由于博客园套了别人的皮,一天发两篇随笔会导致有一篇不见,解决办法是第二天手动修改任意一篇随笔的发布时间,让两篇随笔不在一天发布就行了。过两天我会单独发一篇随笔。
# {'账号' : ['密码','姓名','Y/N']}
student_teacher = {
    'admin': ['123', '1', 'N'],
    '111': ['123', '张三', 'N'],
    '222': ['123', '春游去动物园', 'Y'],
    '333': ['123', '李四', 'Y'],
    '444': ['123', '王五', 'N'],
}


# 获取输入信息,保存到name 和 password
def getInfo():
    name = input('请输入用户名: ').strip()
    password = input('请输入密码: ').strip()
    return name, password


# 注册
def register(student_teacher):
    name, password = getInfo()
    if name == '' or password.isspace():
        print('-----------输入不能为空-----------')
    elif name not in student_teacher:
        student_name = input('请输入你的姓名:').strip()
        is_student = input('是否是学生(Y/N): ').strip().upper()
        str = [password, student_name, is_student]
        student_teacher[name] = str
        print('-----------账号创建成功-----------')
        print(student_teacher)
    elif name in student_teacher:
        print('-----------账号已存在,请重新输入-----------')
        # 重新注册
        register(student_teacher)


# 更新密码
def updatepassword(student_teacher, name):
    psd = input('请输入你想修改的密码: ').strip()
    student_teacher[name][0] = psd
    print('-----------密码修改成功-----------')


# 跟新姓名
def updatename(student_teacher, name):
    nam = input('请输入你想要修改的姓名: ').strip()
    student_teacher[name][1] = nam
    print('-----------姓名修改成功-----------')


# 查找自己的信息
def select_self(student_teacher, name):
    print(
        '''
        账号:{}
        密码:{}
        姓名:{}
        是否为学生:{}
------------------------------------------------------------------------------
        '''.format(name, student_teacher[name][0], student_teacher[name][1], student_teacher[name][2])
    )


# 查看所有信息
def select_all(student_teacher):
    for i in student_teacher:
        if i == 'admin':
            continue
        print(
            '''
账号:{} 密码:{} 姓名:{} 是否为学生:{}
            '''.format(i, student_teacher[i][0], student_teacher[i][1], student_teacher[i][2]))


# 删除信息
def delete_info(student_teacher, name):
    delete_name = input('请输入要删除学生的姓名或账号:').strip()
    if delete_name == name or delete_name == student_teacher[name][1]:
        print('-----------不能删除自己!!!!!!!!!!!!!!!-----------')
    elif student_teacher[name][2] == 'N' and name != 'admin':
        print('-----------不能删除老师-----------')
    elif delete_name in student_teacher:
        student_teacher.pop(delete_name)
        print('-----------删除成功-----------')
    else:
        for i in student_teacher:
            if delete_name == student_teacher[i][1]:
                student_teacher.pop(i)
                print('-----------删除成功-----------')
                break


# 管理员操作
def admin_into(student_teacher, name):
    while True:
        print(
            '''
            1.修改已有账号密码
            2.修改已有账号姓名
            3.修改身份
            4.查看所有账号的所有信息
            5.删除数据
            6.修改密码
            7.退出
            '''
        )
        inp = input('请输入要执行的指令: ').strip()
        if inp == '1':
            nam = input('请输入你想要修改的账号: ').strip()
            if nam in student_teacher:
                updatepassword(student_teacher, nam)
            else:
                print('-----------账号不存在-----------')
        elif inp == '2':
            nam = input('请输入你想要修改的账号: ').strip()
            if nam in student_teacher:
                updatename(student_teacher, nam)
            else:
                print('-----------账号不存在-----------')
        elif inp == '3':
            nam = input('请输入你想要修改的账号: ').strip()
            if nam in student_teacher:
                is_student = input('修改为(Y/N): ').strip().upper()
                student_teacher[nam][2] = is_student
            else:
                print('-----------账号不存在-----------')
        elif inp == '4':
            select_all(student_teacher)
        elif inp == '5':
            nam = input('请输入你想要删除的账号: ').strip()
            if nam in student_teacher:
                student_teacher.pop(nam)
                print('-----------删除成功-----------')
            else:
                print('-----------账号不存在-----------')
        elif inp == '6':
            updatepassword(student_teacher, 'admin')
        else:
            print('-----------再见-----------')
            break


# 登入
def login(student_teacher):
    name, password = getInfo()
    if name in student_teacher and password == student_teacher[name][0]:
        print(f'-----------登入成功,欢迎回来  {name}  !!!-----------')
        # 登入成功后的操作
        # 管理员账号可以进行所有操作
        if name == 'admin':
            admin_into(student_teacher, name)
        elif student_teacher[name][2] == 'Y':
            while True:
                # 进入学生操作界面(可以的操作 修改密码和姓名 查看自己的所有信息 查看所有账号的姓名)
                print(
                    '''
                    1.修改密码
                    2.修改姓名
                    3.查看自己的信息
                    4.查看所有账号的姓名
                    5.退出
                    '''
                )
                inp = input('请输入要执行的指令: ').strip()
                if inp == '1':
                    updatepassword(student_teacher, name)
                elif inp == '2':
                    updatename(student_teacher, name)
                elif inp == '3':
                    select_self(student_teacher, name)
                elif inp == '4':
                    for i in student_teacher:
                        if i == 'admin':
                            continue
                        print(
                            '''
    姓名:{} 是否为学生:{}
                            '''.format(student_teacher[i][1], student_teacher[i][2]))
                elif inp == '5':
                    print('-----------再见-----------')
                    break
                else:
                    print('-----------指令无法识别,请输入正确的指令-----------')

        elif student_teacher[name][2] == 'N':
            # 进入教师界面
            while True:
                print(
                    '''
                    1.修改密码
                    2.修改姓名
                    3.查看自己的信息
                    4.查看所有账号的所有信息
                    5.删除学生数据
                    6.退出
                    '''
                )
                inp = input('请输入要执行的指令: ').strip()
                if inp == '1':
                    updatepassword(student_teacher, name)
                elif inp == '2':
                    updatename(student_teacher, name)
                elif inp == '3':
                    select_self(student_teacher, name)
                elif inp == '4':
                    select_all(student_teacher)
                elif inp == '5':
                    delete_info(student_teacher, name)
                elif inp == '6':
                    print('-----------再见-----------')
                    break
                else:
                    print('-----------指令无法识别,请输入正确的指令-----------')
    elif name not in student_teacher:
        print('-----------该账号不存在,请先注册-----------')
        # 进行注册
        register(student_teacher)
    else:
        print('-----------账号或密码错误,请重新登入-----------')
        # 重新登入
        login(student_teacher)


# 主程序
while True:
    print(
        '''
        1.登入学生管理系统
        2.学生或老师 注册
        3.退出系统
        '''
    )
    choice = input('请输入要执行的指令: ').strip()
    if choice == '1':
        login(student_teacher)
    elif choice == '2':
        register(student_teacher)
    elif choice == '3':
        print('-----------欢迎下次使用-----------')
        break
    else:
        print('指令无法识别,请输入正确的指令')


posted @ 2022-03-10 15:50  春游去动物园  阅读(39)  评论(0编辑  收藏  举报