• python学习:列表、元组、字典、集合


    一、列表LIST

    列表的下标是从0开始的,最后一个元素的下标可以用 -1,取元素的时候”顾头不顾尾“。定义如下列表:

    names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"]

    1、切片:

     1 >>> names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"]
     2 >>> names[1:4]  #取下标1至下标4之间的数字,包括1,不包括4
     3 ['Tenglan', 'Eric', 'Rain']
     4 >>> names[1:-1] #取下标1至-1的值,不包括-1
     5 ['Tenglan', 'Eric', 'Rain', 'Tom']
     6 >>> names[0:3] 
     7 ['Alex', 'Tenglan', 'Eric']
     8 >>> names[:3] #如果是从头开始取,0可以忽略,跟上句效果一样
     9 ['Alex', 'Tenglan', 'Eric']
    10 >>> names[3:] #如果想取最后一个,必须不能写-1,只能这么写
    11 ['Rain', 'Tom', 'Amy'] 
    12 >>> names[3:-1] #这样-1就不会被包含了
    13 ['Rain', 'Tom']
    14 >>> names[0::2] #后面的2是代表,每隔一个元素,就取一个
    15 ['Alex', 'Eric', 'Tom'] 
    16 >>> names[::2] #和上句效果一样
    17 ['Alex', 'Eric', 'Tom']

    2、追加append:

    1 >>> names
    2 ['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy']
    3 >>> names.append("我是新来的")
    4 >>> names
    5 ['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']

    3、插入insert:

    1 >>> names
    2 ['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']
    3 >>> names.insert(2,"强行从Eric前面插入")
    4 >>> names
    5 ['Alex', 'Tenglan', '强行从Eric前面插入', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']
    6 
    7 >>> names.insert(5,"从eric后面插入试试新姿势")
    8 >>> names
    9 ['Alex', 'Tenglan', '强行从Eric前面插入', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']

    4、修改:

    1 >>> names
    2 ['Alex', 'Tenglan', '强行从Eric前面插入', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']
    3 >>> names[2] = "该换人了"
    4 >>> names
    5 ['Alex', 'Tenglan', '该换人了', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']

    5、删除:

    三种方式:

    a、del 列表[下标索引]

    b、列表.remove("元素名称")

    c、列表.pop[下标索引],pop和del的区别在于pop会返回删除的元素,但是del无返回值 

     1 >>> names
     2 ['Alex', 'Tenglan', '强行从Eric前面插入', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']
     3 >>> del names[2] 
     4 >>> names
     5 ['Alex', 'Tenglan', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']
     6 >>> del names[4]
     7 >>> names
     8 ['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']
     9 >>> 
    10 >>> names.remove("Eric") #删除指定元素
    11 >>> names
    12 ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', '我是新来的']
    13 >>> names.pop() #删除列表最后一个值 
    14 '我是新来的'
    15 >>> names
    16 ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy']
    17 >>> names.pop(1) #删除指定位置的元素
    18 Tenglan
    19 >>> names
    20 ['Alex', 'Rain', 'Tom', 'Amy']

    6、扩展extend:

    1 >>> names
    2 ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy']
    3 >>> b = [1,2,3]
    4 >>> names.extend(b)
    5 >>> names
    6 ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', 1, 2, 3]

    7、拷贝:

     1 >>> import copy
     2 >>> names = ["Alex","Tenglan",["Eric",1000],"Rain","Tom","Amy"]
     3 >>> name1=names.copy()
     4 >>> name1
     5 ['Alex', 'Tenglan', ['Eric', 1000], 'Rain', 'Tom', 'Amy']
     6 >>> name2 = copy.copy(names)
     7 >>> name2
     8 ['Alex', 'Tenglan', ['Eric', 1000], 'Rain', 'Tom', 'Amy']
     9 >>> name3=names[:]
    10 >>> name3
    11 ['Alex', 'Tenglan', ['Eric', 1000], 'Rain', 'Tom', 'Amy']
    12 >>> name4=list(names)
    13 >>> name4
    14 ['Alex', 'Tenglan', ['Eric', 1000], 'Rain', 'Tom', 'Amy']
    15 
    16 上面采取了4种方式对names列表进行了copy操作。
    17 现在,我们来继续往下看:
    18 >>> names
    19 ['Alex', 'Tenglan', ['Eric', 1000], 'Rain', 'Tom', 'Amy']
    20 >>> name_copy=list(names)
    21 >>> name_copy
    22 ['Alex', 'Tenglan', ['Eric', 1000], 'Rain', 'Tom', 'Amy']
    23 >>> names[1]='张三'
    24 >>> names
    25 ['Alex', '张三', ['Eric', 1000], 'Rain', 'Tom', 'Amy']
    26 >>> name_copy
    27 ['Alex', 'Tenglan', ['Eric', 1000], 'Rain', 'Tom', 'Amy']
    28 注意:这里我们把names列表copy了一个新的列表name_copy,然后我们更改了names表的第2个元素,从结果可以看出新列表name_copy的第2个元素并没有发生改变。
    29 
    30 接着往下看:
    31 >>> names[2][1]=7777
    32 >>> names
    33 ['Alex', '张三', ['Eric', 7777], 'Rain', 'Tom', 'Amy']
    34 >>> name_copy
    35 ['Alex', 'Tenglan', ['Eric', 7777], 'Rain', 'Tom', 'Amy']
    36 注意:names列表的第3个元素也是一个列表,这里我们执行names[2][1]=7777后发现,names和name_copy两个列表的相应元素同时发生了改变。
    37 
    38 这就是深度copy和浅度copy,上面的4中copy方式都是浅度copy,浅度copy只能copy第一层的元素,对于列表中含有的列表的元素,只是copy了这个子列表的一个内存地址而已。
    39 
    40 如果要实现我们在改变names列表中列表的元素时,copy过来的列表的对应元素不发生变化,必须显示的进行深度copy,往下看:
    41 >>>name_copy2=copy.deepcopy(names) --深度copy
    42 >>>names[2][1]=1521 43 >>> names 44 ['Alex', '张三', ['Eric', 1521], 'Rain', 'Tom', 'Amy'] 45 >>> name_copy2 46 ['Alex', '张三', ['Eric', 7777], 'Rain', 'Tom', 'Amy']

    8、统计count:

    统计某个元素在列表中出现的次数。

    1 >>> names=(1,2,3,2,4,5,3,2,7,2,3)
    2 >>> names.count(3)
    3 3
    4 >>> names.count(2)
    5 4

    9、排序sort、反转reverse:

     1 >>> names = ["Alex","Tenglan",["Eric",1000],"Rain","Tom","Amy"]
     2 >>> names.sort()  #排序
     3 Traceback (most recent call last):
     4   File "<stdin>", line 1, in <module>
     5 TypeError: '<' not supported between instances of 'list' and 'str'
     6 >>> names.pop(2)
     7 ['Eric', 1000]
     8 >>> names
     9 ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy']
    10 >>> names.sort() #排序
    11 >>> names
    12 ['Alex', 'Amy', 'Rain', 'Tenglan', 'Tom']
    13 
    14 >>> names.reverse() #反转
    15 >>> names
    16 ['Tom', 'Tenglan', 'Rain', 'Amy', 'Alex']

    列表的排序和反转对中文没有效果:

     1 >>> names=['zhangsan','张三','章邯']
     2 >>> names.sort()
     3 >>> names
     4 ['zhangsan', '张三', '章邯']
     5 >>> names=['张三','zhangsan','章邯']
     6 >>> names.sort()
     7 >>> names
     8 ['zhangsan', '张三', '章邯']
     9 >>> names.append('阿三')
    10 >>> names
    11 ['zhangsan', '张三', '章邯', '阿三']
    12 >>> names.sort()
    13 >>> names
    14 ['zhangsan', '张三', '章邯', '阿三']
    15 >>> names.append('asan')
    16 >>> names.sort()
    17 >>> names
    18 ['asan', 'zhangsan', '张三', '章邯', '阿三']

    10、获取下标index:

    注意:只返回找到指定元素的第一个下标

    1 >>> names
    2 ['asan', 'zhangsan', '张三', '章邯', '张三', '阿三']
    3 >>> names.index('zhangsan')
    4 1
    5 >>> names.index('张三')
    6 2

    二、元组TUPLE

    元组和列表其实差不多,只是元组一旦创建就不允许再修改,所以元组又叫做只读列表。

    元组的定义:

    names = ("Alex","Tenglan","Eric","Rain","Tom","Amy")

    元组只有两个方法:count、index、len

     1 tu1 = ("Alex","Tenglan","Eric","Rain","Tom","Amy","Eric","Eric")
     2 print(len(tu1))            # 8 计算元组中元素的个数
     3 print(tu1.count('Eric'))   # 3 计算元组中有多少个指定的元素
     4 print(tu1.index('Eric'))   # 2 查找第一次出现指定元素的位置,如果找不到则报异常
     5 print(tu1.index('Eric', 3))   # 6 查找第一次出现指定元素的位置,如果找不到则报异常
     6 
     7 print(tu1.index('Tenglan', 3))   # Error 查找第一次出现指定元素的位置,如果找不到则报异常
     8 Traceback (most recent call last):
     9   File "D:/python/study/day01.py", line 14, in <module>
    10     print(tu1.index('Tenglan', 3))   # Error 查找第一次出现指定元素的位置,如果找不到则报异常
    11 ValueError: tuple.index(x): x not in tuple

    元组也可以切片:

    1 tu1 = ("Alex","Tenglan","Eric","Rain","Tom","Amy")
    2 print(tu1[0])    # Alex
    3 print(tu1[-1])   # Amy
    4 print(tu1[1:3])  # ('Tenglan', 'Eric')
    5 print(tu1[:-1])  # ('Alex', 'Tenglan', 'Eric', 'Rain', 'Tom')
    6 print(tu1[::])   # ('Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy')
    7 print(tu1[::2])  # ('Alex', 'Eric', 'Tom')
    8 print(tu1[::-1]) # ('Amy', 'Tom', 'Rain', 'Eric', 'Tenglan', 'Alex')

    三、字典DICT

    字典是另一种可变容器模型,且可存储任意类型对象。

    字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示:

    d = {key1 : value1, key2 : value2 }

    字典的特性:

    1、键必须是唯一的,但值则不必。

    2、Key必须是不可变数据类型(int,str,bool,tuple),但Value可以是任意数据类型(int,str,bool,tuple,list,dict,set)等

    创建字典的几种方式:

     1 # 方式1:
     2 dic = dict((('one', 1),('two', 2),('three', 3)))
     3 print(dic)  # {'one': 1, 'two': 2, 'three': 3}
     4 dic = dict([('one', 1),('two', 2),('three', 3)])
     5 print(dic)  # {'one': 1, 'two': 2, 'three': 3}
     6 
     7 # 方式2:
     8 dic = dict(one=1,two=2,three=3)
     9 print(dic)  # {'one': 1, 'two': 2, 'three': 3}
    10 
    11 # 方式3:
    12 dic = dict({'one': 1, 'two': 2, 'three': 3})
    13 print(dic)  # {'one': 1, 'two': 2, 'three': 3}
    14 
    15 # 方式4:
    16 dic = dict(zip(['one', 'two', 'three'],[1, 2, 3]))
    17 print(dic)
    18 
    19 # 方式5: 字典推导式
    20 dic = {k: v for k,v in [('one', 1),('two', 2),('three', 3)]}
    21 print(dic)
    22 
    23 # 方式6:利用fromkey
    24 dic = dict.fromkeys('abcd','dict')
    25 print(dic)  # {'a': 'dict', 'b': 'dict', 'c': 'dict', 'd': 'dict'}
    26 
    27 #很蛋疼,方式太多了记不住,直接用下面的方式不好吗?
    28 dic = {'one': 1, 'two': 2, 'three': 3}
    29 print(dic)  #{'one': 1, 'two': 2, 'three': 3}

    字典常用的方法:

     1 # 通过键值对直接增加
     2 # 如果key存在,则会修改这个key对应的value,如果key不存在就增加
     3 dic = {'name': '张三', 'age': 18}
     4 dic['weight'] = 79  # weight键不存在,增直接增加此键值对
     5 print(dic)
     6 
     7 dic['name'] = '李四' # name这个键已经存在,则修改值为 李四
     8 print(dic)
     9 
    10 # 通过setdefault增加
    11 # 如果key存在,则不做任何改变,如果key不存在就增加
    12 # setdefault是有返回值的
    13 dic.setdefault('height',180) # height 键不存在,则会增加此键值对
    14 print(dic)
    15 
    16 dic.setdefault('name','王五') # name键已经存在,则不会发生任何改变
    17 print(dic)
    18 
    19 ret = dic.setdefault('name') # setdefault有两个参数,如果只有key,则返回value
    20 print(ret)

     1 dic = {'name': '李四', 'age': 18, 'weight': 79, 'height': 180}
     2 
     3 # pop,通过key来删除字典的键值对,有返回值,返回key对应的value
     4 # 可以设置默认的返回值
     5 ret = dic.pop('age')
     6 print(ret) # 18
     7 
     8 ret = dic.pop('wahaha',None)
     9 print(ret,dic) # None {'name': '李四', 'weight': 79, 'height': 180}
    10 
    11 ret = dic.pop('wahaha','QQXing')
    12 print(ret,dic) # QQXing {'name': '李四', 'weight': 79, 'height': 180}
    13 
    14 # popitem, 删除最后一个键值对
    15 ret = dic.popitem()  # 返回值ret是一个元组
    16 print(ret,dic)  # ('height', 180) {'name': '李四', 'weight': 79}
    17 
    18 # del, 通过key删除,如果没有指定key,则会删除整个字典
    19 dic = {'name': '李四', 'age': 18, 'weight': 79, 'height': 180}
    20 del dic['weight']
    21 print(dic)
    22 
    23 del dic['wahaha'] # wahaha这个key不存在,会报错
    24 Traceback (most recent call last):
    25   File "D:/python/study/day01.py", line 23, in <module>
    26     del dic['wahaha']
    27 KeyError: 'wahaha'
    28 
    29 del dic  # del 删除整个字典,打印会报错
    30 print(dic) # NameError: name 'dic' is not defined
    31 
    32 # clear, 清空字典
    33 dic.clear()
    34 print(dic)  # {}

     1 # 通过设置键值对直接改,存在就改,不存在会增加
     2 dic = {'name': '李四', 'age': 18}
     3 dic['name'] = '王五'
     4 print(dic)  # {'name': '王五', 'age': 18}
     5 
     6 # update
     7 dic = {'name': '李四', 'age': 18}
     8 dic.update(weight = 79, height = 180)
     9 print(dic) # {'name': '王五', 'age': 18, 'weight': 79, 'height': 180}
    10 
    11 dic = {'name': '李四', 'age': 18}
    12 dic.update([(1,'a'),(2,'B'),(3,'c')])
    13 print(dic) # {'name': '李四', 'age': 18, 1: 'a', 2: 'B', 3: 'c'}
    14 
    15 dic1 = {'name': '李四', 'age': 18}
    16 dic2 = {'name': '王五', 'weight': 79, 'height': 180}
    17 dic1.update(dic2) # 把dic2合并到dic1,dic1中有的就替换,没有的就新增
    18 print(dic1) # {'name': '王五', 'age': 18, 'weight': 79, 'height': 180}
    19 print(dic2) # {'name': '王五', 'weight': 79, 'height': 180}

     1 dic = {'name': '王五', 'age': 18}
     2 
     3 # 通过键查,直接用dic[key]。
     4 # 注意:如果key不存在则会报错
     5 ret = dic['name']
     6 print(ret)  # 王五
     7 
     8 # get,用dic.get(key)
     9 # 如果key不存在则默认返回None,也可以指定一个默认的返回值,如“查无此键”
    10 # 如果key存就返回对应value
    11 ret = dic.get('name')
    12 print(ret) # 王五
    13 
    14 ret = dic.get('wahaha')
    15 print(ret) # None
    16 
    17 ret = dic.get('wahaha', '查无此键')
    18 print(ret) # 查无此键
    19 
    20 # dic.keys(),返回所有的key组成的一个列表,可转换成列表
    21 ret = dic.keys()
    22 print(ret) # dict_keys(['name', 'age'])
    23 ret = list(ret)
    24 print(ret)  # ['name', 'age']
    25 
    26 # dic.values(),返回所有的value组成的一个列表
    27 ret = dic.values()
    28 print(ret) # dict_values(['王五', 18])
    29 ret = list(ret)
    30 print(ret)  # ['王五', 18]
    31 
    32 # dic.items(),返回整个字典,返回值是一个列表,每个元素是字典的每个键值对形成的一个元组
    33 ret = dic.items()
    34 print(ret) # dict_items([('name', '王五'), ('age', 18)])
    35 ret = list(ret)
    36 print(ret)  # [('name', '王五'), ('age', 18)]
    37 
    38 # 判断某个key是否存在
    39 if 'name' in dic:
    40     print('key:name is exist')
    41 
    42 # 循环打印字典
    43 # 下面两种方式结果一样,但是第一种方式比第二种性能高很多。第二种在循环之前会把整个字典的键值对转成list都装入内存,数据量大时千万慎用。
    44 for i in dic:
    45     print(i,dic[i])
    46 
    47 # 效率极其低下
    48 for k,v in dic.items():
    49     print(k,v)
    50 
    51 # fromkeys,不知道哪里可以用到
    52 dic = dict.fromkeys('abcd','小蜗')
    53 print(dic) # {'a': '小蜗', 'b': '小蜗', 'c': '小蜗', 'd': '小蜗'}
    54 
    55 dic = dict.fromkeys([1, 2, 3],'小蜗')
    56 print(dic) # {1: '小蜗', 2: '小蜗', 3: '小蜗'}

    四、集合set

    集合(set)是一个无序的不重复元素序列。

    可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

    创建格式:

    set1 = {value01,value02,...}
    或者
    set(value)

    1、创建集合

     1 set1 = set()  # 定义一个空集合,用set()
     2 print(set1,type(set1)) # set() <class 'set'>
     3 set1.add('孙悟空')
     4 set1.add('如来佛')
     5 print(set1) # {'孙悟空', '如来佛'}
     6 
     7 set2 = set('abc')
     8 print(set2) # {'b', 'a', 'c'}
     9 
    10 set3 = set(1,2,3)   # 报错
    11 Traceback (most recent call last):
    12   File "D:/python/study/day01.py", line 11, in <module>
    13     set3 = set(1,2,3)
    14 TypeError: set expected at most 1 arguments, got 3

    2、增(add 、update)

     1 set4 = set({2,4,6})
     2 
     3 # 添加一个元素
     4 set4.add(999)
     5 print(set4) # {2, 4, 6, 999}
     6 
     7 # 添加多个元素,迭代着增加。参数可以是列表、元组、集合)
     8 set4.update([44,55,66])  # 参数是列表
     9 print(set4) # {2, 66, 4, 6, 999, 44, 55}
    10 
    11 set4.update(('a','b'),('c','d'))  # 参数是元组
    12 print(set4) # {'b', 'c', 2, 66, 4, 'd', 6, 999, 44, 'a', 55}
    13 
    14 set4.update({'one','two'},{'three','four'})  # 参数是集合
    15 print(set4) # {'b', 'c', 2, 66, 4, 'd', 6, 999, 'four', 44, 'three', 'one', 'a', 55, 'two'}

    3、删(pop、remove、discard、clear、del)

     1 set4 = {2, 66, 44, 6, 999, 55}
     2 
     3 # pop,随机删除一个元素
     4 ret = set4.pop()
     5 print(set4) # {66, 6, 999, 44, 55}
     6 print(ret) # 2
     7 
     8 # remove,删除指定的元素,无返回值(返回None)。元素存在就删除,不存在会报错
     9 ret = set4.remove(44)
    10 print(set4) # {66, 4, 6, 999, 55}
    11 print(ret) # None
    12 
    13 ret = set4.remove(444) 
    14 Traceback (most recent call last):
    15   File "D:/python/study/day01.py", line 59, in <module>
    16     ret = set4.remove(444) # 删除指定的元素,无返回值(返回None)
    17 KeyError: 444
    18 
    19 # discard,删除指定的元素,无返回值(返回None)。元素存在就删除,不存在无异常抛出
    20 ret = set4.discard(66)
    21 print(set4) # {66, 4, 6, 999, 55}
    22 print(ret) # None
    23 
    24 ret = set4.discard(666)
    25 print(set4) # {66, 4, 6, 999, 55}
    26 print(ret) # None
    27 
    28 # clear,清空集合
    29 set4.clear()
    30 print(set4)
    31 
    32 # del,删除集合
    33 del set4
    34 print(set4)  # del后,set4已经不存在了,print会抛出异常
    35 Traceback (most recent call last):
    36   File "D:/python/study/day01.py", line 80, in <module>
    37     print(set4)
    38 NameError: name 'set4' is not defined

    4、集合的运算

     1 list1 = [1,3,5,3,7,9,1,11]
     2 list2 = [2,4,5,4,66,7,8,6,2,10]
     3 
     4 #自动去重,无序
     5 set1 = set(list1)
     6 set2 = set(list2)
     7 print(set1)  # {1, 3, 5, 7, 9, 11}
     8 print(set2)  # {2, 4, 5, 6, 7, 8, 10}
     9 
    10 # 交集
    11 print(set1.intersection(set2)) # {5, 7}
    12 print(set1 & set2) # {5, 7}
    13 
    14 # 并集
    15 print(set1.union(set2)) # {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}
    16 print(set1 | set2) # {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}
    17 
    18 # 差集,
    19 print(set1.difference(set2)) # {11, 1, 3, 9}
    20 print(set1 - set2) # {11, 1, 3, 9}
    21 
    22 # 子集,父集
    23 set3 = set([1,3,5])
    24 
    25 print(set3.issubset(set1)) # True
    26 print(set3 <= set1) # True
    27 
    28 print(set1.issuperset(set3)) # True
    29 print(set1 >= set3) # True
    30 
    31 # 对称差集:去掉两者的共同元素后组成的集合
    32 print(set1.symmetric_difference(set2)) # 1, 2, 66, 4, 6, 8, 3, 10, 9, 11}
    33 print(set1 ^ set2) # 1, 2, 66, 4, 6, 8, 3, 10, 9, 11}
    34 
    35 # 检查是否有相同的元素,如果两个集合没有任何相同的元素,则返回False
    36 set4 = set({2,4,6})
    37 print(set3.isdisjoint(set4)) # True
    38 set4 = set({1,4,6})
    39 print(set3.isdisjoint(set4)) # False

    5、frozenset

    不能被修改

    t = frozenset('shop')
    print(t) # frozenset({'s', 'h', 'p', 'o'})

     6、成员关系 (in, not in)

    1 >>> 'k' in s
    2 False
    3 >>> 'k' in t
    4 True
    5 >>> 'c' not in t
    6 True

    7、集合等价/不等价

    1 >>> s == t
    2 False
    3 >>> s != t
    4 True
    5 >>> u = frozenset(s)
    6 >>> s == u
    7 True
    8 >>> set('posh') == set('shop')
    9 True

    五、购物车作业

    需求(列表):

    1、启动程序后,让用户输入工资,然后打印商品列表

    2、用户选择商品编号购买商品

    3、用户选择商品后,检测余额是否够,如果余额够就直接扣款,如果不够就提醒

    4、可随时退出,退出时打印已购买的上和余额

     1 product_list = [('Iphone',5800),
     2                 ('Mac Pro',9800),
     3                 ('Bike',800),
     4                 ('Watch',10600),
     5                 ('Coffee',31),
     6                 ('Alex Python',120)]
     7 shopping_cart = []
     8 
     9 salary = input("Input your salary: ")
    10 if salary.isdigit():
    11     salary = int(salary)
    12     while 1:
    13         for item in product_list:
    14             print(product_list.index(item) + 1, item)
    15 
    16         user_choice = input("请选择需要购买的商品:").lower()
    17         if user_choice.isdigit():
    18             user_choice = int(user_choice)
    19             if user_choice > 0 and user_choice <= len(product_list):
    20                 p_item = product_list[user_choice - 1]
    21                 if p_item[1] <= salary:
    22                     shopping_cart.append(p_item)
    23                     salary = salary - p_item[1]
    24                     print("Added %s into shopping cart,your current balance is 33[31;1m%s33[0m"%(p_item[0], salary))
    25                 else:
    26                     print("33[32;1m你的余额只剩下【%s】元,无法再购买任何商品!33[0m"%salary)
    27             else:
    28                 print("你选择的商品不存在商品列表中!")
    29         elif user_choice == 'q':
    30             print("-------shopping cart--------")
    31             for index, item in enumerate(shopping_cart):
    32                 print(item)
    33             print("Your current balance is :", salary)
    34             break
    35         else:
    36             print('Invalid Option...')
    View Code
  • 相关阅读:
    JS 的加密库简介
    十三、行为型模式之解释器、迭代器-----《大话设计模式》
    十二、行为型模式之中介者、访问者、备忘录-----《大话设计模式》
    十一、行为型模式之模板方法、职责链、策略-----《大话设计模式》
    十、行为型模式之观察者、命令、状态-----《大话设计模式》
    十、行为型模式之观察者、命令、状态-----《大话设计模式》
    九、结构型模式之装饰、组合、外观、享元-----《大话设计模式》
    八、结构型模式之适配器、桥接、代理-----《大话设计模式》
    七、创建型模式之建造者、原型、单例-----《大话设计模式》
    六、创建型模式之工厂模式进化史-----《大话设计模式》
  • 原文地址:https://www.cnblogs.com/Ryan-Fei/p/12085080.html
Copyright © 2020-2023  润新知