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()#当前文件光标位置

 

posted @ 2016-10-24 15:17  hongpeng0209  阅读(280)  评论(0编辑  收藏  举报