py07.1_数据类型(元组、字典)与简易购物车
一、元组
1.用途
元组是不可变的列表,能存多个值,若多个值只有取的需求,而没有改的需求,那么用元组最合理,因为列表占用的内存比元组大
2.定义方式
在()内用逗号隔开,可以存放任意类型的值
animals=("mouse","cattle","tiger") #animals=tuple(("mouse","cattle","tiger")) print(type(animals))
👍👍👍👍👍强调👍👍👍👍👍
当元组内只有一个元素时,务必记住加一个逗号,如不加逗号,这里默认变量时括号里的类型
animal=("mouse") print(type(animal)) #<class "str"> animal=("horse",) print(type(animal)) #<class "tuple">
3.常用操作+内置方法
3.1 按照索引取值(正向取+反向取) + 切片(顾头不顾尾) ⭐只能取⭐
animals=("mouse","cattle","rabbit","tiger","horse")
#正向 print(animals[0:2]) #反向 print(animals[::-1]) #不能改值 animals[0]="hello" TypeError: 'tuple' object does not support item assignment
3.2 长度
animals=("dog","cat","rabbit","mouser","horse") print(len(animals))
3.3 成员运算in和not in
animals=("cat","dragon","horse","sheep") print("horse" in animals)
3.4 循环
course=("physical","mathmatric","english","biology") for item in course: print(item)
4、该类型总结
4.1 存一个值或者多个值
可以存多个值,值可以时任意的数据类型
4.2 有序或者无序
有序
4.3 可变或者不可变
不可变
names=("luffy","sauro","luffy","brooke","luffy") #del names[0] #error #names[0]="LUUFFY"#error print(names.count("luffy")) print(names.index("luffy",0,4))
5 列表与元组可变不可变的底层原理
💗💗💗列表可变的底层原理💗💗💗
指的时索引所对应的值的内存地址是可以改变的
💗💗💗元组不可变的底层原理💗💗💗
指的是索引所对应的值的内存地址是不可以改变的
反过来说,只要索引对应值的内存地址没有改变,那么元组始终是没有改变的
元组不变指的是只要索引对应的内存地址没有变,那么元组始终是没有改变的 list=("hello","boy",["sleep","read"]) print(id(list)) #1270839132304 print(id(list[0])) # 2712094024512 print(id(lsit[1])) # 2712094863632 print(id(list[2])) # 2712094065096 list[2][2]="eat" print(list) print(id(list[2])) #1270839144720
二、字典
1.用途
用来储存多个值(value),但每一个值(value)都有一个key与之对应,key对值(value)具有描述性的功能。当存储多个值但需要表示不同的状态时,可以用字典来描述更合适。
2.定义方式
2.1 {}内用逗号分隔开多个元素,每一个元素都是key:value的形式
2.2 value可以是任意数据类型,但是key必须为不可变类型,key通常应该时字符串类型
d={"a":"hello","speak":3} #d=dict({"a":"hello","speak":3}) d=dict(a=1,b=2,c=3) #定义这个字典{"a":1,"b":2,"c":3} print(d)
3.常用操作+内置方法
⭐⭐⭐⭐⭐优先掌握的操作⭐⭐⭐⭐⭐
3.1 按key取值:可存可取
dic={"x":1,"y":2} dic["x"]=99 #把字典中x对应值改成99 print(dic) dic["z"]=3 print(dic) #在字典中再加一个元素:{"x":99,"y":2,"z":3} print(dic) l=["hello","python"] l[2]="sun" print(l) #列表中不能这样操作 IndexError: list assignment index out of range
3.2 删除()
dict={"name":"tiamo,"age":18,"sex":"female"} del dict["sex"] #万能删 删除的是对应的 key:value res=dict.pop("sex") #是由返回值的删除,其中返回值是删掉元素中的value print(dict) #{"name":"tiamo","age":18} print(res) #famale res=dict.popitem() print(dict) #因字典是无序的,所以是随机删除字典dict中的任意一个 key:value print(res) #返回值是删掉的那组元素,返回形式是元组(key:value)
3.3 键keys(),值values(),键值对items()
fruits={ "apple":16, "strawberry":20, "blueberry":24, "watermelon":8, } keys=[] for key in fruits: #取出的是字典的key keys.append(key) #把key按照取出顺序丢进列表当中 print(keys) values=[] for k in fruits: vualues.append(fruits[k]) #fruits[k]取出的是字典中的value print(values) ⭐把字典中的key变成列表⭐ keys=fruits.keys() print(keys) #把字典当中的所有key取出组成 #dict_keys(['apple', 'strawberry', 'blueberry', 'watermelon']) for k in keys: print(k) #输出列表中的各个元素,也就是字典当中的key l=list(keys) print(l) #把字典中的key变成列表 ⭐把字典中的value变成列表⭐ values=fruits.values() print(values) print(list(values)) ⭐把字典中的key:value变成列表["key":"value"]⭐ # print(fruits.items()) # print(list(fruits.items()))
3.4 循环
fruits={ "apple":16, "strawberry":20, "blueberry":24, "watermelon":8, } ⭐只取key⭐ # for k in fruits: # print(k,fruits[k]) for k in fruits.keys() print(k) ⭐只取value⭐ for v in fruits: print(v) ⭐取key和value⭐ for k,v in fruits.items() #k,v=("key","value") print(k,v)
3.5 长度
dict={"x":1,"y":2} print(len(dict))
3.6 成员运算 in和 not in
dict={"x":1,"y":2} print("x" in dict) #字典成员运算比较的是key
⭐⭐⭐⭐需掌握的内置方法⭐⭐⭐⭐
⭐get dict={"x":1,"y":2,"z":3} v=dict.get("key") #通过key将字典中的数据(value)取出来,如果key不在字典中会返 print(v) #回None而不会报错 print(dict["key"]) #直接使用dict[key]形式如果key不在字典内,则会报错 ⭐update dict1={"x":1,"y":2,"z":3} #将dict2的字典合入dict1中;若dict1中有的key,会将 dict2={"x":9999,"a":248,"b":369} #dict2中的key赋值给dict1 dict1.update(d2) #dict1中没有的key,会将dict2中的key:value放入dict1中 ⭐⭐⭐⭐将列表快速初始化为字典的操作⭐⭐⭐⭐ list=["sleep","basketball","smile"] d={} ①for k in l: d[k]=None #{'sleep': None, 'basketball': None, 'smile': None} ②d=dict.fromkeys(l,None) print(d) #{'sleep': None, 'basketball': None, 'smile': None} ⭐⭐⭐setdefault⭐⭐⭐ info={"name":"Luffy,"sex":"male"} ①如果字典中有setdefault指定的key,那么就不应该改key对应的原来的value值,返回原来字典中的value res=info.setdefault("name","Brooke") print(info) #{'name': 'Luffy', 'sex': 'male'} print(res) # Luffy ②如果字典中没有setdefault指定的key,那么增加一个key:value,返回新增的value res=info.setdefault("age",18) print(info) #{'name': 'Luffy', 'sex': 'male', 'age': 18} pirnt(res) # 18
(❤ ω ❤)setdefault的用法
统计各个单词的个数,并以字典的形式展现出来 {'hello': 3, 'python': 1, 'say': 1, 'today': 1, 'sunshine': 1} s="hello sunshine hello name today sing" l=s.split() #把字符串变成列表 d={} for word in l: d.setdefault(word,l.count(word)) #统计每个单词个数,并以字典形似表示 print(d)
4.字典总结
4.1 存一个值或者多个值
可以存多个值,值都可以是任意类型,但是key必须是不可变类型,通常应该是不可变类型中的字符串类型
4.2 有序或者无序
无序
4.3 可变或者不可变
可变
验证: d={'x':1,'y':2} print(id(d)) d['x']=1111 print(id(d))
5.队列(先进先出)
l=[] 入队 l.append("hello") l.append("weight") l.append("height") #l=["hello","weight","height"] 出队 print(l.pop(0)) #hello print(l.pop(0)) #weight print(l.pop(0)) #height
6.堆栈(先进后出)
l=[] 入栈 l.append("hello") l.append("weight") l.append("height") #l=["hello","weight","height"] 出栈 print(l.pop()) #height print(l.pop()) #weight print(l.pop()) #hello
(❤ ω ❤)简易购物车
msg={ "apple":13 , "watermelon":9 , "strawberry":18 } shopping_cart=[] while True: for k in msg: info="商品:%s 商品价格:%s" %(k,msg[k]) print(info.center(40," ")) user_choice=input("请输入需要购买的商品:").strip() if user_choice not in msg: print("请重新输入>>") continue #输入错误会跳过当次输入的内容,重新输入商品信息 while True: count=input("请输入购买数量:").strip() if count.isdigit() count=int(count) break #输入整数之后就可以退出,不必重新输入 else: print("请输入正确的购买数量>>") for item in shopping_cart: #for...else的用法 if user_choice==item("user_choice") #如果for后的条件成立, item["count"]+=count #就不会执行else下的代码; break #若到这一步,说明买家已经第二次购买该商品了 else: #如果for后的条件不成立, price=msg["user_choice"] #就会执行else下的代码。 info={"user_choice":user_choice,"count":count,"price":price} shopping_cart.append(info) print(shopping_cart)