1、昨日内容回顾
自己多练
2、作业
# 作业 # 1,有如下变量(tu是个元祖),请实现要求的功能。 tu= ("alex",[11,22,{"k1":'V1',"k2":["age","name"],"k3":(11,22,33)},44]) # a.讲述元祖的特性。 # 儿子不能改,孙子可能可以改 # b.请问tu变量中的第一个元素 “alex” 是否可被修改?。 # 不可以 # c.请问tu变量中的"k2"对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素"Seven" 。 # k2 对应的是一个列表,可以改,(元{字[列表]典}组) # tu[1][2]['k2'].append('seven') # print(tu) # d.请问tu变量中的"k3"对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素“Seven" 。 # 元组,不能 # 2,字典 dic, dic= {'k1':'v1','k2':'v2','k3':[11,22,33]} #a.请循环输出所有的key for i in dic.keys(): print(i) #b.请循环输出所有的value. for i in dic.values(): print(i) #c.请循环输出所有的key和value. for k,v in dic.items(): print(k,v) for i in dic.items(): print(i) #d.请在字典中添加一个键值对,"k4": "v4",输出添加后的字典。 dic['k4'] = 'v4' print(dic) #e.请在修改字典中“k1” 对应的值为"alex",输出修改后的字典。 dic.setdefault('k4','v4') print(dic) #f.请在k3对应的值中追加一个元素44,输出修改后的字典。 dic['k3'] = [11,22,33,44] print(dic) #g.请在k3对应的值的第1个位置插入个元素18,输出修改后的字典。 dic1 = dic['k3'] dic1.insert(1,18) dic['k3'] = dic1 print(dic) # 3、元素分类. #有如下值 li = [11,22,33,44,55,66,77,88,99,90], # 将所有大于66的值保存至字典的第一个key中。 # 将小于66的值保存至第二个key的值中。 # 即: {'k1': 大于66的所有值列表,'k2':小于66的所有值列表} li = [11,22,33,44,55,66,77,88,99,] dic = {} l_greater = [] #大于66的所有列表 l_less = [] #小于66的所有列表 for i in li: if i == 66:continue if i > 66: l_greater.append(i) else: l_less.append(i) dic.setdefault('k1',l_greater) dic.setdefault('k2',l_less) print(dic) # 4、输出商品列表,用户输入序号,显示用户选中的商品 # 商品li = ["手机","电脑","鼠标垫","游艇"]要求: # 1,页面显示序号+商品名称,如: # 1 手机 # 2 电脑 # ... ... # 2,用户输入选择的商品序号,然后打印商品名称 # 3,如果用户输入的商品序号有误,则提示输入有误,并重新输入。 # 4,用户输入Q或者q,退出程序。 while 1: li = ["手机","电脑","鼠标垫","游艇"] for i in li: print('{}\t{}'.format(li.index(i)+1,i)) num = input('请输入商品序号/输入 Q or q 退出:') if num.isdigit(): num = int(num) if 0 < num and num <= len(li): print(li[num -1]) else:print('请输入有效数字') elif num.upper() == 'Q':break else:print('请输入数字')
3、python2 、python3 的区别
python 2: python 3:
print() print'abc' print('abc')
range() xrange() 生成器 range()
raw_input() input()
4、= == is
=:把一个值赋值给另一个值
==:比较值是否相等
is: 比较,比较的是内存地址 id(内容)
li1 = [1,2,3] li2 = li1 此时li1和li2 用的是否是一个内存地址
print(li1 is li2) #is 是比较内存地址 结果为Ture
print(id(li1),id(li2)) # id 是查li1 及li2 的内存地址,结果相同
5、数字、字符串
小数据池:在一定程度上节省空间
数字范围:-5 —— 256
字符串:1、不能有特殊特殊字符
2、s*20还是同一个地址,s*21以后都是两个地址
l1 = 6
l2 = 6
print(id(l1),id(l2))
剩下的:list dict tuple set 都没有小数据池概念
6、编码
ascii:
A:00000010 一个字节 8位
unicode:
A:00000000 00000001 00000010 00000100 32位 四个字节
中:00000000 00000001 00000010 00000110 32位 四个字节
utf-8:
A:0010 0000 8位一个字节
中:00000001 00000010 00000110 24位 三个字节
gbk:
A:00000110 8位 一个字节
中:00000010 00000110 16位 两个字节
(1)各个编码之间的二进制是不能相互是别的,会产生乱码。
(2)文件的储存传输不能是unicoide(只能是utf—8 utf—16 gbk gb2312 asciid 等)
python3:
str 在内存当中使用unicode储存的。
bytes类型
对于英文:
str:表现形式:s = 'alex'
编码方式:010101010 unicode
bytes:表现形式:s = b'alex'
编码方式:000101010 utf-8 gbk
对于中文:
str:表现形式:s = '中国'
编码方式:010101010 unicode
bytes:表现形式:s = b'x\e91\e91\e01\e21\e31\e32' 三个字节表示一个中文
编码方式:000101010 utf-8 gbk
# s = 'alex'
# s1 = b'alex'
# print(s,type(s))
# print(s1,type(s1))
# encode 编码,外部将 str-->bytes # 内部将unicod——>utf-8、gbk ()内可以设置编码方式 s1 = 'alex' s11 = s1.encode('utf-8') s12 = s1.encode('gbk') print(s11) # b'alex' print(s12) s2 = '中国' s22 = s2.encode('utf-8') s23 = s2.encode('gbk') print(s22) print(s23)
# 购物车作业讲解 # 买家 卖家 商品 金钱 li = [ {'name':'苹果','price':10}, {'name':'香蕉','price':20}, {'name':'西瓜','price':30}, ] # 把货物放在货架上 shopping_car = {} print('欢迎光临大铁锤水果店') money = input('让我看看你的钱') if money.isdigit() and int(money)>0: while 1: for i,k in enumerate(li): print('序号{},商品{},价格{}'.format(i,k['name'],k['price'])) choose = input('请输入你要购买的商品序号') if choose.isdigit() and int(choose) < len(li): num = input('你要购买得商品数量') if num.isdigit(): if int(money) > li[int(choose)]['price']*int(num): money = int(money)-li[int(choose)]['price']*int(num) if li[int(choose)]['name'] in shopping_car: shopping_car[li[int(choose)]['name']] = shopping_car[li[int(choose)]['name']] + int(num) else:shopping_car[li[int(choose)]['name']] = int(num) print('购物车中得商品有{},你的余额为{}'.format(shopping_car,money)) else:print('穷鬼,回去跟你老婆要钱去') else:print('都说了是序号了')