zoukankan      html  css  js  c++  java
  • Day3-python基础3

    本次学习内容  

      元组

      字典

      集合

      字符编码  

      文件处理

    一、元组

    定义:与列表类似,定义是使用()

    特性

    1.可存放多个值

    2.元组里的元素是不可变的

    3.有序,下标从0开始从左往右的顺序访问

    元组常用操作和列表一样

    二、字典

    定义:{}里key-value结构

    key定义规则

    1.不可变(数字,字符串,元组,*列表是不能作为key的,因为列表里的元素可变)

    2.唯一,否则执行时会覆盖前面的value 

    dic = {'age':21,'age':22}

    value定义规则:任意数据类型

    dic1 = {
        1:'alex',
        'name':'hongpeng',
        (1,2,3):{'age':18}
    
    }

    字典的常用操作

    #创建,第一种最常用
    person = {"name": "alex", "age": 18}
    person = dict(name='alex', age=18)
    person = dict({"name": "alex", 'age': 18})
    person = dict((['name','alex'],['age',18]))
    #
    dic = {'name':'alex','age':18}
    dic['gender'] = 'male'
    #
    dic['age'] =20
    #
    del dic['name']
    dic.pop('name')#
    #
    print(dic.get('nameeeee'))#不会报错,返回None
    print(dic['name'])
    #快速创建字典
    data = dict.fromkeys([1,2,3],{"name":"alex","age":18})
    print(data)
    #输出{1: {'age': 18, 'name': 'alex'}, 2: {'age': 18, 'name': 'alex'}, 3: {'age': 18, 'name': 'alex'}}
    #用这种方法创建字典时有个坑,对应的value的值在内存中都是同一地址,也就是说如果只改1这个key对应的value,2,3对应的value也会改。
    data[1]["name"] = 'Alex'
    print(data)
    #打印字典的key和value
    (1for k,v in dic.items():字典转换列表,少用,占内存
        print(k,v)
    print(dic.keys())
    (2for i in dic.keys():
        print(i,dic[i])

    字典的深浅copy

    #浅copy,只copy第一层
    dic = {'name':'hongpeng','age':21,'girlfriends':['mashengxi','wutenglan','xiaozemaliya']}
    dic2 = dic.copy()
    print(dic)
    print(dic2)
    dic['name'] = 'alex'
    dic['girlfriends'][2] = 'fandaoai'
    print(dic)
    print(dic2)
    #输出
    {'name': 'hongpeng', 'age': 21, 'girlfriends': ['mashengxi', 'wutenglan', 'xiaozemaliya']}
    {'name': 'hongpeng', 'age': 21, 'girlfriends': ['mashengxi', 'wutenglan', 'xiaozemaliya']}
    {'name': 'alex', 'age': 21, 'girlfriends': ['mashengxi', 'wutenglan', 'fandaoai']}
    {'name': 'hongpeng', 'age': 21, 'girlfriends': ['mashengxi', 'wutenglan', 'fandaoai']}



    应用:联合信用卡

      acc1 = {"name":"林海峰", "account":{"credit":3000, "balance":3000}}
      acc2 = acc1.copy()
      acc2["name"] ="杠娘"
      print(acc1)
      print(acc2)

      acc2["account"]["balance"] -= 680

      print(acc2)
      print(acc1)


    #深copy import copy acc = {'name':'alex','age':18,'information':['gender','male']} acc1 = copy.deepcopy(acc) acc2 = acc.copy() print(id(acc['information'])) print(id(acc1['information'])) print(id(acc2['information']))

    三级菜单优化版本

    知识点:

    • 字典
    • 列表
    • while循环
    • if...else流程控制
    menu = {
        '北京':{
            '海淀':{
                '五道口':{
                    'soho':{},
                    '网易':{},
                    'google':{}
                },
                '中关村':{
                    '爱奇艺':{},
                    '汽车之家':{},
                    'youku':{},
                },
                '上地':{
                    '百度':{},
                },
            },
            '昌平':{
                '沙河':{
                    '老男孩':{},
                    '北航':{},
                },
                '天通苑':{},
                '回龙观':{},
            },
            '朝阳':{},
            '东城':{},
        },
        '上海':{
            '闵行':{
                "人民广场":{
                    '炸鸡店':{}
                }
            },
            '闸北':{
                '火车战':{
                    '携程':{}
                }
            },
            '浦东':{},
        },
        '山东':{},
    }
    current_level = menu
    last_level = []
    while True:
        for key in current_level:
            print(key)
        choice = input(">>:").strip()
        if len(choice) == 0:continue
        if choice == 'b':
            if len(last_level) == 0:break
            #当前层改成父亲层,并删除last_level列表中的父亲层
            current_level = last_level[-1]
            last_level.pop()
        if choice not in current_level:continue
        #把当前层放入last_level列表中
        last_level.append(current_level)
        current_level = current_level[choice]
    View Code

    三、集合

    定义:集合是一个无序的,不重复的数据组合

    基本操作
    s = set([3,5,9,10])      #创建一个数值集合  
      
    t = set("Hello")         #创建一个唯一字符的集合  
    
    
    a = t | s          # t 和 s的并集  
      
    b = t & s          # t 和 s的交集  
      
    c = t – s          # 求差集(项在t中,但不在s中)  
      
    d = t ^ s          # 对称差集(项在t或s中,但不会同时出现在二者中)  
      
       
      
    基本操作:  
      
    t.add('x')            # 添加一项  
      
    s.update([10,37,42])  # 在s中添加多项  
      
       
      
    使用remove()可以删除一项:  
      
    t.remove('H')  
      
      
    len(s)  
    set 的长度  
      
    x in s  
    测试 x 是否是 s 的成员  
      
    x not in s  
    测试 x 是否不是 s 的成员  
      
    s.issubset(t)  
    s <= t  
    测试是否 s 中的每一个元素都在 t 中  
      
    s.issuperset(t)  
    s >= t  
    测试是否 t 中的每一个元素都在 s 中  
      
    s.union(t)  
    s | t  
    返回一个新的 set 包含 s 和 t 中的每一个元素  
      
    s.intersection(t)  
    s & t  
    返回一个新的 set 包含 s 和 t 中的公共元素  
      
    s.difference(t)  
    s - t  
    返回一个新的 set 包含 s 中有但是 t 中没有的元素  
      
    s.symmetric_difference(t)  
    s ^ t  
    返回一个新的 set 包含 s 和 t 中不重复的元素  
      
    s.copy()  
    返回 set “s”的一个浅复制 

    四、字符编码  

    1.字符编码一种在内存,内存固定使用unicode编码,一种在硬盘,硬盘的编码(即可以修改的编码)

    2.使用什么编码往硬盘存,就用什么编码去读

    3.程序运行分两阶段:1.从硬盘读到内存2.python解释器运行已经读到内存的代码

    encode:编码

    decode:解码

    五、文件处理

    文件的几种打开模式

    r:只读(文件必须存在,不存在报错)

    w:只写(不存在创建,存在清空)

    a:追加(可读,不存在创建,存在追加内容)

    r+:读写

    w+:写读,会把原文件覆盖

    a+:追加

    #
    f = open('test','r',encoding='utf-8')
    for line in f.readlines():#会一次性读到内存里
        print(line.strip())
    for line in f:#读一行写一行
        print(line.strip())
    #关闭 f.close()
    with open('test','r',encoding='utf-8')as f#操作完不需要close文件 f.write() f.flush()#操作完文件刷新,从内存到硬盘,不需要close文件 f.seek()#寻找
    f.tell()#当前文件光标位置
  • 相关阅读:
    Vue监听器、过滤器
    Vue生命周期、计算属性
    数组去重
    ES6总结
    学习笔记--html篇(1)
    学习整理--flex布局(1)
    对块作用域与变量函数提升再添新认识
    了解使用web workers
    js中的事件循环模型与特殊的定时器
    操作系统、浏览器与js之间的一些概念与联系
  • 原文地址:https://www.cnblogs.com/hongpeng0209/p/5993099.html
Copyright © 2011-2022 走看看