zoukankan      html  css  js  c++  java
  • 文件

    1集合用途

    :list、tuple、dict一样都可以存放多个值,但是集合主要用于:去重、关系运算

    2.定义:

    在{}内用逗号分隔开多个元素,集合具备以下三个特点:
    1:每个元素必须是不可变类型
    2:集合内没有重复的元素
    3:集合内元素无序

    s = {1,2,3,4}  # 本质 s = set({1,2,3,4})
    
    # 注意1:列表类型是索引对应值,字典是key对应值,均可以取得单个指定的值,而集合类型既没有索引也没有key与值对应,所以无法取得单个的值,而且对于集合来说,主要用于去重与关系元素,根本没有取出单个指定值这种需求。
    
    # 注意2:{}既可以用于定义dict,也可以用于定义集合,但是字典内的元素必须是key:value的格式,现在我们想定义一个空字典和空集合,该如何准确去定义两者?
    d = {} # 默认是空字典 
    s = set() # 这才是定义空集合
    

    3.类型转换

    # 但凡能被for循环的遍历的数据类型(强调:遍历出的每一个值都必须为不可变类型)都可以传给set()转换成集合类型
     s = set([1,2,3,4])
     s1 = set((1,2,3,4))
     s2 = set({'name':'jason',})
     s3 = set('egon')
     s,s1,s2,s3
    {1, 2, 3, 4} {1, 2, 3, 4} {'name'} {'e', 'o', 'g', 'n'}
    

    4、关系运算

    firends1 = {"zero", "kevin", "jason", "egon"}
    firends2 = {"jy", "ricky", "jason", "egon"}
    

    1、取二者的共同好友:交集

    res = firends1 & firends2
    print(res)
    

    2、取二者所有的好有有哪些:并集

    res=firends1 | firends2
    
    print(res)
    

    3、取第一个人res=firends1 | firends2

    res=firends1 - firends2
    print(res)
    
    res=firends2 - firends1
    print(res)
    

    4、求两个用户独有的好友们(即去掉共有的好友):对称差集/交叉补集

    res1=firends1 - firends2
    
    res2=firends2 - firends1
    print(res1 | res2)
    
    print(firends1 ^ firends2)
    

    5、父子集:一个集合包含另外一个集合,他们才有父子集的关系

    s1 = {1, 2, 3}
    s2 = {3, 4, 5}
    
    print(s1 > s2) # False
    print(s1 < s2) # False
    print(s1 == s2) # False
    

    集合1>集合2 结果True时,意味着集合1内的元素完全包含了集合2

    s1={1,2,3}
    s2={1,2}
    
    print(s1 > s2) # 结果True,代表s1是s2的父集
    print(s2 < s1) # 结果True,代表s2是s1的子集
    
    
    s1 = {1, 2, 3}
    s2 = {3, 2, 1}
    print(s1 == s2)
    

    6、常用操作与内置方法

    s1 = {3, 2, 1}
    for item in s1:
        print(item)
    
    s1 = {3333, "aaa", 222, "bbb", 111}
    

    1、s1.update()

    print(id(s1))
    s1.update({3,4,5})
    print(s1)
    print(id(s1))
    

    2、s1.clear()

    s1 = {3333, "aaa", 222, "bbb", 111}
    
    s1.clear()
    

    3、s1.pop()

    res=s1.pop() # 随机删除,把蛋取走
    print(s1)
    print(res)
    

    4、s1.remove() # 只是删除,捏碎了

    s1 = {3333, "aaa", 222, "bbb", 111}
    res = s1.remove(3333)
    print(s1)
    print(res)
    

    5、s1.discard() # 与s1.remove一样都是指定元素删除,不一样的是???

    s1 = {3333, "aaa", 222, "bbb", 111}
    res=s1.discard(3333)
    print(s1)
    print(res)
    

    不一样的地方:当删除的元素不存在时,s1.discard不会报错

    s1.discard(555555)
    s1.remove(555555) # 指定元素不存在则报错
    
    
    s1.add()
    s1 = {3333, "aaa", 222, "bbb", 111}
    s1.add(555555555)
    print(s1)
    
    s1.isdisjoint(s2) # 如果s1与s2没有共同的元素则返回True
    s1={1,2,3}
    s2={4,5}
    print(s1.isdisjoint(s2))
    

    总结集合set:
    存多个值
    无序
    set集合是可变类型

    1、什么是文件

    ​ 文件是操作系统提供给用户/应用程序操作硬盘的一个虚拟单位/功能

    ​ 应用程序/用户对文件的读写操作都是在向操作系统发起系统调用
    ​ 操作系统接收到调用请求后,会将该请求转换成具体的硬盘操作

    2、为何要用文件

    ​ 应用程序操作文件为了将内存中的数据永久保存到硬盘中去

    3、如何操作文件

    一:文件的基本操作

    文件的路径:找到文件的地址
    绝对路径:r'C:ac ew.txt'
    相对路径:相对于当前程序所在文件夹往后找,r"aaa/a.txt"

    f = open(r"aaa/a.txt", mode='rt', encoding='utf-8')
    
    data=f.read()
    print(data)
    
    f.close() # 释放操作系统资源
    

    二:文件的模式

    2.1 控制文件读写内容的模式(不能单独使用,必须与rwa结合使用)

    t:(默认的)
    1、读写内容都是以字符串为单位
    2、只适用于文本文件
    3、必须指定encoding参数

    b:
    1、读写内容都是以bytes为单位
    2、适用于所有文件
    3、一定不能指定encoding参数

    2.2 控制文件读写操作的模式

    r:(默认的)
    1、只读模式
    2、当文件不存在时则报错
    3、当文件存在时文件指针跳到文件开头

    f = open('b.txt', mode='rt', encoding='utf-8')
    data = f.read()
    print(data)
    f.close()
    
    w:

    1、只写模式

    2、当文件不存在会创建一个空文件,然后文件指针跳到文件开头
    3、当文件存在时文件内容会被清空,然后文件指针跳到文件开头

    f = open('c.txt', mode='wt', encoding='utf-8')
    name = input('>>: ')
    f.write(name)
    f.write("egon
    ")
    f.write("张三
    ")
    f.write("李四
    ")
    
    f.write("王五
    ")
    f.write("赵铁蛋
    ")
    f.write("张全蛋
    ")
    f.close()
    
    a:

    1、只追加模式

    2、当文件不存在会创建一个空文件,然后文件指针跳到文件末尾
    3、当文件存在时文件内容不会被清空,文件指针跳到文件末尾

    f = open('d.txt',mode='at',encoding='utf-8')
    f.write('aaa
    ')
    f.write('bbb
    ')
    f.write('ccc
    ')
    f.close()
    
    w与a模式的相同点

    在文件打开了没有被关闭的情况下,连续的写入,新写入的内容总是跟在老内容之后

    w与a模式的不同点
    在文件关闭了重新打开的情况下,a模式永远把文件指针放到文件末尾

    案例一:编写一个用户注册功能,注册的内容是账号名和名
    name = input("请输入您的账号>>:").strip()
    pwd = input("请输入您的密码>>:").strip()
    
    账号密码合法性校验
    
    f = open('db.txt',mode='at',encoding='utf8')
    f.write("%s:%s
    " %(name,pwd))
    f.close()
    
    ##### 
    
    案例二:编写一个用户验证功能,账号密码来自于文件
    inp_name = input("请输入您的账号>>:").strip()
    in_pwd = input("请输入您的密码>>:").strip()
    
    打开文件,读取账号密码与用户输入的账号密码进行比对
    f = open('db.txt', mode='rt', encoding='utf-8')
    for line in f:
    
    print(line) # "egon:123
    "
    
    ​    name, pwd = line.strip("
    ").split(':')
    ​    if inp_name == name and in_pwd == pwd:
    ​        print('登录成功')
    ​        break
    else:
    ​    print('账号密码输入错误')
    
    f.close()
    
  • 相关阅读:
    CCF CSP 201403-2 窗口
    Ethical Hacking
    Ethical Hacking
    Ethical Hacking
    Ethical Hacking
    Ethical Hacking
    Ethical Hacking
    Ethical Hacking
    Ethical Hacking
    Ethical Hacking
  • 原文地址:https://www.cnblogs.com/lgh8023/p/13084860.html
Copyright © 2011-2022 走看看