上节课复习
上节课复习:
1、元组
元组就相当于不可变的列表
当我们要存放多个值,并且多个值是没有被修改的需求时,应该使用元组
t=('name',) #t=tuple(('name'))
总结:
1、可以存放多个任意类型的值
2、有序
3、不可变类型
2、字典
用于存放多个值,但是每一个值都有一个对应的key,key对值有描述性的
功能
当存放的值属于不同的状态是(年龄、身高、性别、体重),用字典可以明确地
区分不同值的用途
d={'name':'egon','age':18} #d=dict(...)
d=dict(a=1,b=2,c=3)
v=d.pop('a')
del d['a']
d.keys()
d.values()
d.items()
for k in d:
print(k,d[k])
for k in d.keys():
print(k,d[k])
for v in d.values():
pass
for k,v in d.items():
pass
d.get('a')
今日内容:
集合&关系运算
文件处理
字符编码
只有文本文件才设计到字符编码
视频 音频 图片等都和字符编码无关 有其自己的编码方式
1 字符编码
将人类的字符编码/转换成计算机能识别的数字
这种转换必须遵循一套固定的标准,该标准无非是
人类字符与数字的对应关系,称之为字符编码表
A---->0000 0000
B---->0000 0001
c---->0000 0002
d---->0000 0003
bit:二进制位
Bytes:字节
ASCII码表:用1Bytes表示一个英文字符
1英文字符=8bit=1Bytes
GBK:用2Bytes表示一个中文字符,1Bytes去表示英文字符
unicode:内存中使用的是unicode编码,unicode把全世界的字符都建立好对应关系
用2Bytes去表示一个字符
0000 0000 0000 0000
utf-8 #unicode tranform format-8
utf-8 用1Bytes表示英文,用3Bytes表示中文
#字符编码需要记住的概念
#01 内存中固定使用unicode编码,我们唯一可以改变的存储到硬盘时使用的编码
#02 要想保证存取文件不乱码,应该保证文档当初是以什么编码格式存的,就应该以什么编码格式去读取
#03 python3解释器默认编码是UTF-8 (所以文件如果是是gbk存储的 从硬盘加载到内存这一步就是错误的)
python2解释器默认编码是ASCII
在python2中有两种字符串编码格式
1、unicode:
x=u'上'
2、unicode编码后的结果
x='上' #如果文件头为coding:utf-8,那么"上"被存成utf-8格式的二进制
在python3只有一种字符串编码格式:
1、unicode
x='上’
#04 编码与解码 编码对应从内存到硬盘,解码对应从硬盘到内存
unicode-------编码encode-------->gbk
unicode<-------解码decode--------gbk
#***
#coding:gbk
x='上’
x.decode('gbk')
#coding:gbk
x=u'上'
x.encode('gbk')
x.encode('utf-8')
#在python3中(*****)
x='上'
x只能进行编码
x.encode('gbk')
总结python2与python3:
(***)
在python2中的字符串类型str都是unicode按照文件头的指定的编码,编码之后的结果
在python2中也可以制造unicode编码的字符串。需要在字符串前加u
(*****)
在python3中的字符串类型str都是unicode编码的
所以python3中的字符串类型可以编码成其他字符编码格式,编码的结果
是bytes类型
集合
http://www.cnblogs.com/linhaifeng/articles/7133357.html
作业
#作业一: 三级菜单 #要求: 打印省、市、县三级菜单 可返回上一级 可随时退出程序
layer = [menu,] while True: if len(layer) == 0:break current_layer = layer[-1] for k in current_layer: print(k) choice = input('选择>>: ').strip() if choice == 'q': break if choice == 'b': layer.pop() continue if not current_layer[choice]:break layer.append(current_layer[choice])
#作业二:请闭眼写出购物车程序 #需求: 用户名和密码存放于文件中,格式为:egon|egon123 启动程序后,先登录,登录成功则让用户输入工资,然后打印商品列表,失败则重新登录,超过三次则退出程序 允许用户根据商品编号购买商品 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 可随时退出,退出时,打印已购买商品和余额
product_list = [['Iphone7', 5800], ['Coffee', 30], ['疙瘩汤', 10], ['Python Book', 99], ['Bike', 199], ['ViVo X9', 2499], ] # 构建商品编号列表,用于判断用户的输入编号是否在此范围内 product_number_list = [] for i in range(len(product_list)): product_number_list.append(str(i)) shopping_cart = [] # 创建空列表存放字典,购物车信息 number = 1 # 商品数量初始化为1 name_db = 'egon' pwd_db = 'egon123' count = 1 while count <= 3: name_inp = input('username>>: ').strip() pwd_inp = input('password>>: ') if name_db == name_inp and pwd_db == pwd_inp: salary = input('your salary>>: ').strip() # 1 工资如果是浮点型不判断 2 如果是整形可以加isdigit判断 salary = int(salary) while True: for i in range(len(product_list)): info = '商品编号:%s product:%s price:%s' % (i, product_list[i][0], product_list[i][1]) print(info.ljust(50, ' ')) product_number = input('请输入商品编号>>: ').strip() if product_number not in product_number_list: print('商品编号输入错误,请重新输入>>: ') else: product_number = int(product_number) product = product_list[product_number][0] price = product_list[product_number][1] if salary >= product_list[product_number][1]: salary -= product_list[product_number][1] for item in shopping_cart: if item['product'] == product: item['number'] += 1 item['salary'] = salary break else: info = {'product': product, 'number': number, 'price': price, 'salary': salary} shopping_cart.append(info) else: print('余额不足') cmd = input('退出请输入Y/y,继续请按任意键: ').strip() if cmd == 'Y' or cmd == 'y': count = 4 print(shopping_cart) break else: print('wrong username or password ') count += 1
预习:文件处理,函数