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)
View Code

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
View Code

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
View Code

(❤ ω ❤)简易购物车

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)
View Code

 

posted @ 2018-06-02 14:56  Smart1san  阅读(363)  评论(0编辑  收藏  举报