哪有什么岁月静好,不过是有人替你负重前行!

元组类型、字典类型

#元组类型
#一:基本使用 #
1 用途:元组是不可变的列表,能存多个值,但多个值只有取的需求,而没有改的需求,那么用元组最合理 # # 2 定义方式:在()内用逗号分割开,可以存放任意类型的值 # names=('alex','egon','wxx') #names=tuple(('alex','egon','wxx')) # print(type(names)) # 强调: 当元组内只有一个元素时,务必记住加一个逗号 # x=('egon',) # print(type(x)) # 3 常用操作+内置的方法 #1、按索引取值(正向取+反向取):只能取 # names=('alex','egon','wxx') # names[0]='sb' #2、切片(顾头不顾尾,步长) # names=('alex','egon','wxx','lxx','cxxx') # print(names[1:3] # ) #3、长度 # names=('alex','egon','wxx','lxx','cxxx') # print(len(names)) #4、成员运算in和not in # names=('alex','egon','wxx','lxx','cxxx') # print('alex' in names) #5、循环 # names=('alex','egon','wxx','lxx','cxxx') # for item in names: # print(item) # #二:该类型总结 # 1 存一个值or存多个值 # 可以存多个值,值都可以是任意数据类型 # # 2 有序or无序 #有序 # 3 可变or不可变 #不可变 names=('alex','egon','wxx','lxx','cxxx','lxx') # del names[0] #会报错,原因是元组不能被修改 :TypeError: 'tuple' object doesn't support item deletion # names[0]='sb' # print(names.count('lxx')) #count统计元组中指定元素的个数 # print(names.index('wxx',0,3)) #index统计指定切片内,指定元素的索引 # names=('alex','egon','wxx','lxx','cxxx','lxx') # names=1 #这不叫改元组值,只是对一个元组重新赋值 # l=[1,243,3] # # # l=3333 # l=['a','b','c'] # print(id(l)) # print(id(l[0])) #改变列表中元素的值,列表的id不会改变,但是列表中元素的id会改变 # l[0]='A' # print(id(l)) # print(id(l[0])) #列表可变是指内存地址是 # names=('a','b','c') # 列表可变的底层原理: #指的是索引所对应的值的内存地址是可以改变的 # 元组不可变的底层原理: #指的是索引所对应的值的内存地址是不可以改变的 #或者反过来说,只要索引对应值的内存地址没有改变,那么元组始终是没有改变的 # t1=(['a','b','c'],'wc','office') # # print(id(t1[0])) #元组中三个元素对应的id是不同的,id=2135396392648 # print(id(t1[1])) # print(id(t1[2])) # # # t1[0][0]='AAAA' #本质修改的是元组中列表中元素的值,并不是整体修改元组中一个元素的值 # print(t1) # # # print(id(t1[0])) #id=2135396392648 修改了元组中第一个列表中的值所以id是不变的
#练习
#队列:先进先出
# l=[]
# # 入队
# # l.append('王苗鲁')
# # l.append('王成龙')
# # l.append('大脑门')
# #出队
# print(l.pop(0))
# print(l.pop(0))
# print(l.pop(0))
#堆栈:先进后出
# l=[]
# #入栈
# l.append('王苗鲁')
# l.append('王成龙')
# l.append('大脑门')
# #出栈
#
# print(l.pop())
# print(l.pop())
# print(l.pop())




msg_dic={
'apple':10,
'tesla':100000,
'mac':3000,
'lenovo':30000,
'chicken':10,
}

shopping_cart=[]
while True:
    for k in msg_dic:
        info='商品名:%s 价钱:%s' % (k, msg_dic[k])
        print(info.center(50,' '))
    name=input('请输入商品名>>: ').strip()
    if name not in msg_dic:
        # 输入的商品名不合法,打印提示信息并且直接进入下一次循环
        print('输了些什么玩儿。。。重输')
        continue
    # else:
    #     #输入的商品品合法,结束循环
    #     break

    while True:
        count=input('请输入购买个数:').strip()
        if count.isdigit():
            #输入个数合法
            count=int(count)
            break
        else:
            print('商品的个数必须为整数')
            # continue # 不加continue也会跳入下一次

#    name,count
    for item in shopping_cart:
        # print(item)
        if name == item['name']:
            item['count']+=count
            break
    else:
        price=msg_dic[name]
        info={'name':name,'count':count,'price':price}
        shopping_cart.append(info)
    print(shopping_cart)
字典类型
#一:基本使用
# 1 用途:用来存多个值,但每一个值都有一个key与之对应,key对值有描述性的功能
#        当存储多个值表示的不同的状态时,
#
# 2 定义方式:{}内用逗号分隔开多个元素,每一个元素都是key:value的形式
#value可以是任意数据类型,但是key必须为不可变类型,key通常应该是字符串类型,
# d={'x':1,'y':2} #d=dict({'x':1,'y':2})
# d=dict(a=1,b=2,c=3)       #通过dict可以创建字典
# print(d)


dic={1:'a',0:'b',1.1:'c',(1,2,3):'d'}
# print(dic[1])        #数字也可以当做key值,但是这样会与索引产生误解,不能明确是通过key取value
# print(dic[0])
# print(dic[1.1])       #不可变类型都可以作为key值,但是通常我们使用字符串作为key值
# print(dic[(1,2,3)])
# dic={[1,2,3]:'a'}      #可变类型不可以作为key
# dic={{'x':1}:'a'}

#
# 3 常用操作+内置的方法
#优先掌握的操作:
#1、按key存取值:可存可取
# d={'y':2}
# d['x']=100         #通过key来向字典中加入key:value,如果已经存在key:value,则会在原来的基础上对key对应的value值做替换
# print(d)       #{'y': 2, 'x': 100}

# d['z']=3
# print(d)

# d={'x':1,'y':2}
# d['x']=100         #通过key来向字典中加入key:value,如果已经存在key:value,则会在原来的基础上对key对应的value值做替换
# print(d)     #{'x': 100, 'y': 2}

# l=['a','b']
# l[2]='c'       #而列表不能通过索引添加值,报错是因为索引超出范围,IndexError: list assignment index out of range
# l[1]='c'     #通过索引改变列表中指定位置的值
# print(l)

#2、长度len
# d={'x':1,'y':2}
# print(len(d))      #len也可以统计字典中元素的个数
#3、成员运算in和not in
# d={'x':1,'y':2}
# print('x' in d)     #in判断一个字符是否在字典中的key值

#4、删除
# d={'x':1,'y':2}
# del d['x']          #del通过key值来删除字典中的key:value
# # print(d)
# res=d.pop('y')         #pop通过key删除字典中的key:value,但会拿到删除'y':2中value的值2
# print(d)
# print(res)

# res=d.popitem()     #popitem()默认会删除右边的key:value,也会拿到一个返回值,以key,value元组的形式返回('y', 2)
# print(d)
# print(res)

# d={'a':1,'b':2,'c':3,'d':4}
# for k in d:             #通过for循环取出字典中所有的key值
#     print(k)

# l=[1,2,3]            # del通过索引删除列表中的元素
# del l[1]
# print(l)

#5、键keys(),值values(),键值对items()
msg_dic={
'apple':10,
'tesla':100000,
'mac':3000,
'lenovo':30000,
'chicken':10,
}
# names=[]
# for k in msg_dic:  #通过for循环把字典中的key值取出来,在通过append把取出的key值添加到空列表中
#     names.append(k)
# print(names)         #['apple', 'tesla', 'mac', 'lenovo', 'chicken']
# values=[]
# for k in msg_dic:    #通过for循环取出key值,在通过append将value加入到空列表中
#     values.append(msg_dic[k])
# print(values)

# keys=msg_dic.keys()    #通过keys取出一只老母鸡dict_keys(['apple', 'tesla', 'mac', 'lenovo', 'chicken'])
# print(keys)
# for k in keys:     #在循环老母鸡就可以取出字典中的key值
#     print(k)
# l=list(keys)        #通过list可以将老母鸡转换成一个列表['apple', 'tesla', 'mac', 'lenovo', 'chicken']
# print(l)
#
# vals=msg_dic.values()    #通过values取出一只老母鸡dict_values([10, 100000, 3000, 30000, 10])
# print(vals)
# print(list(vals))    #同过list将老母鸡的value转换成一个列表[10, 100000, 3000, 30000, 10]

# print(msg_dic.items())    #通过items取出一只老母鸡dict_items([('apple', 10), ('tesla', 100000), ('mac', 3000), ('lenovo', 30000), ('chicken', 10)])
# print(list(msg_dic.items()))   #通过list将老母鸡转换成一个列表,列表中的元素以小元组的形式存在[('apple', 10), ('tesla', 100000), ('mac', 3000), ('lenovo', 30000), ('chicken', 10)]
#6、循环
msg_dic={
'apple':10,
'tesla':100000,
'mac':3000,
'lenovo':30000,
'chicken':10,
}
# 只取key
# for k in msg_dic:      #循环字典本质就是循环字典中的key值
#     print(k,msg_dic[k])

# for k in msg_dic.keys():
#     print(k,msg_dic[k])

# 只取value
# for v in msg_dic.values():  #通过点values循环出字典中的所有value值
#     print(v)

#取key和value
# for k,v in msg_dic.items(): #k,v=('apple', 10)  变量的解压
#     print(k,v)       #通过点items取出加for循环取出字典中的key和value值

# 需要掌握的内置方法(****)
# d={'x':1,'y':2,'z':3}
# v=d.get('xxxx')         #点get的方法和通过key取value值得功能一样,只是get通过key取值是如果key不存在,不会报错
# print(v)
# print(d['xxxxxxx'])   #key值不存在,取不到value就会报错KeyError: 'xxxxxxx'

# d={'x':1,'y':2,'z':3}
# d1={'a':1,'x':1111111}
# d.update(d1)     #update会更新原有字典中的key:value,存在则更新,不存在加入到原字典中
# print(d)        #{'x': 1111111, 'y': 2, 'z': 3, 'a': 1}

# l=['name','age','sex']
# d={}
# for k in l:
    # d[k]=None
# print(d)            #打印结果{'name': None, 'age': None, 'sex': None}

# d=dict.fromkeys(l,None)    #不使用for循环,使用dict.fromkey也可以实现将一个列表转换成字典,并给不同的key加上默认的value值
# d=dict.fromkeys(l,18)      #{'name': 18, 'age': 18, 'sex': 18}
# print(d)


# info.setdefault
# info={'name':'egon','age':18,'sex':'male'}

# 如果字典中有setdefault指定的key,那么不改该key对应的值,返回原的value
# res=info.setdefault('name','EGON_NB')
# print(info)
# print(res)

# 如果字典中没有setdefault指定的key,那么增加一个key:value,返回新的value
# info.setdefault('height',1.80)
# print(info)
#
# info={'age':18,'sex':'male'}
# v=info.setdefault('name','浩哥')       #因为字典中没有('name','浩哥'),setdefault就会将其放入字典中,并将新的value值返回
# print(v)          #浩哥
# print(info)       #{'age': 18, 'sex': 'male', 'name': '浩哥'}



# 统计串中各个单词的个数
# s='hello alex alex say hello sb sb'
# l=s.split()         #split将字符串切分成列表
# print(l)           #['hello', 'alex', 'alex', 'say', 'hello', 'sb', 'sb']
# d={}
# for word in l: #word=  'hello'         #循环列表拿到每一个单词
#     if word not in d:                  #判断单词是否在字典中
#         d[word]=1 #{'hello':2, 'alex':2,'say':1}     #不在则说明是一个新的单词,将其以key:value的形式刚入到字典中去
#     else:
#         d[word]+=1                            #字典中已经存在的单词,对其value加一操作,即单词的个数
# print(d)             #{'hello': 2, 'alex': 2, 'say': 1, 'sb': 2}


# s='hello alex alex say hello sb sb'
# l=s.split()
# print(l)
# d={}
# d={'hello':2,'alex':2}
# for word in l: #word='alex'        #循环取出列表中的单词
#     # d[word]=l.count(word) #d['alex']=2     #通过count统计列表中某个单词的个数,将写进到字典中单词对应的value值(方法一)
#     d.setdefault(word,l.count(word))      #将key,value放到字典中(方法二)
# print(d)


# #二:该类型总结
# 1 存一个值or存多个值
#     可以存多个值,值都可以是任意类型,而key必须是不可变类型,通常应该是不可变类型中字符串类型
#
# 2 有序or无序
# 无序
#
# 3 可变or不可变

# d={'x':1,'y':2}
# print(id(d))
# d['x']=1111
# print(id(d))

# d=123

 

posted @ 2018-05-31 20:35  迎风而来  阅读(342)  评论(0编辑  收藏  举报
/*吸附球*/