春游去动物园(🍺)|

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

字典内置方法

  
  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('指令无法识别,请输入正确的指令')


本文作者:春游去动物园

本文链接:https://www.cnblogs.com/chunyouqudongwuyuan/p/15989736.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   春游去动物园  阅读(42)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
展开
  1. 1 生分 川青
生分 - 川青
00:00 / 00:00
An audio error has occurred.

生分 - 川青

词:莎子

曲:邵翼天

编曲:林亦

混音:罗杨轩

吉他:林亦

制作人:谢宇伦

监制:曾炜超/陈显

策划:+7

统筹:黄染染

出品:漫吞吞文化

『酷狗音乐人 • 星曜计划』

全方位推广,见证星力量!

「版权所有未经许可 不得商业翻唱或使用」

我们怎么变得那么生分

用了几年也没解开疑问

有些事你不提我也不问

在陌生与熟悉间找平衡

有些话一开口会伤人

有些话一开口会伤人

所以我选择默不作声

所以我选择默不作声

爱一个人

若甘愿陪衬

甘愿牺牲

也许换个名分

也不是没可能

我不怕在爱里做个蠢人

我不怕在爱里做个蠢人

也不怕爱过之后再分

也不怕爱过之后再分

爱一个人

有万种身份

万种可能

只是没想到

我们最后友人相称

我们怎么变得那么生分

我们怎么变得那么生分

连说话都要掌握好分寸

怕不注意流言

见缝插针

怕不小心我们

成陌生人

我们怎么变得那么生分

用了几年也没解开疑问

有些事你不提我也不问

在陌生与熟悉间找平衡

有些话一开口会伤人

有些话一开口会伤人

所以我选择默不作声

所以我选择默不作声

爱一个人

若甘愿陪衬

甘愿牺牲

也许换个名分

也不是没可能

我不怕在爱里做个蠢人

我不怕在爱里做个蠢人

也不怕爱过之后再分

也不怕爱过之后再分

爱一个人

有万种身份

万种可能

只是没想到我们最后

友人相称

我们怎么变得那么生分

连说话都要掌握好分寸

怕不注意流言见缝插针

怕不小心我们成陌生人

我们怎么变得那么生分

用了几年也没解开疑问

有些事你不提我也不问

在陌生与熟悉间找平衡

我们怎么变得那么生分

我们怎么变得那么生分

连说话都要掌握好分寸

怕不注意流言见缝插针

怕不小心我们成陌生人

我们怎么变得那么生分

用了几年也没解开疑问

有些事你不提我也不问

在陌生与熟悉间找平衡