P51 字典
'''
特点:键值对
结构:{键1:值,键2:值,键3;值}
字典:{}
元素:键值对 注意:键是唯一的,值是允许重复的
下标 或者 切片 ---> 没有
1.添加元素:
字典名[key] = value
注意:key是唯一的,所以在添加的时候如果出现同名的key,后面key对应的value则替换原来的
2.修改value值
字典名[key] = value
关键看"键":如果字典中不存在键,则是添加
如果字典中存在键,则是修改
'''
dict1 = {}
print(type(dict1))
dict1['name'] = '阿泽'
print(dict1)
# {'name': '阿泽'}
dict1['name'] = '阿龙'
print(dict1)
dict1['age'] = 20
dict1['sex'] = '男'
print(dict1)
# 改变年龄
# 键 可以添加 删除,但无法修改,只能修改键后面的值
dict1['age'] = 21
print(dict1)
#
dict1['score'] = 90
'''
练习:
book = {}
书名,价格,作者,出版社
促销:价格折扣 8折
打印最终字典中的内容
'''
book = {}
book['name'] = '书名'
book['price'] = 10
book['出版社'] = '美滋滋出版社'
print(book)
# 修改价格
book['price'] *=0.8 # book['price']=book['price']*0.8
print(book)
P52-53 字典删除
'''
字典删除:
pop(key):根据key实现删除,删除的是键值对。返回值key对应的value
popitem(): 返回值:(key,value),从后往前删除
clear():清空
系统的删除:
del
'''
book = {'name': '书名', 'price': 10, '出版社': '美滋滋出版社'}
# 表示一本书的信息
# 清空
# book.clear()
# print(book)
# pop 删除:根据key实现删除,删除的是键值对。返回值key对应的value
# r = book.pop('出版社')
# print(r)
# print(book)
# popitem() 返回值:(key,value) 从后往前删除
r = book.popitem()
print(r) # ('出版社', '美滋滋出版社')
print(book) # {'name': '书名', 'price': 10}
r = book.popitem()
print(r) # ('price', 10)
print(book) # {'name': '书名'}
book = {'name': '书名', 'price': 10, '出版社': '美滋滋出版社'}
del book['price'] #类似于pop(key)
print(book)
# del book
# print(book) #book is not defined
'''
book = {}
书名,价格,作者,出版社
借了:
books = [{},{}]
删除:每一本里面的出版社
最终打印books
'''
books = [
{'书名':'《三体》','价格':20,'作者':'刘慈欣','出版社':'**出版社'},
{'书名':'《流浪地球》','价格':18,'作者':'刘慈欣','出版社':'###出版社'}
]
for book in books:
book.pop('出版社')
print(books)
P54 字典遍历和获取
'''
遍历和查询:
list.index() list.count() in
获取:
dict.get(key):根据key获取value值
dict[key]:根据key获取value值
区别:get(key) 里面的key如果不存在则返回None,同时get(key,默认值) 可以设置默认值
dict[key] 报error错误
如果使用for..in直接遍历字典, 取出的是字典的key值
for i in book:
print(i)
获取字典中所有的value值: 字典.values() 就会将所有的值存放到一个列表中
for v in book.values():
print(v)
获取字典中所有的key值: 字典.keys() 就会将所有的值存放到一个列表中
for v in book.keys():
print(v)
获取键值对: 字典.items()---> [{key,value),(),(),...]
for k,v in book.items:
print(k,v)
'''
book = {'书名': '《三体》', '价格': 20, '作者': '刘慈欣'}
# 根据key得到value值
value = book.get('书名1') # 取出的不是书名本身,而是对应的值
# '书名1'不存在,不会报错
print(value)
print(len(book)) # 3对
# value = book['书名1']
# '书名1'不存在,会报错
# print(value)
value = book.get('书名1', '找不到书名1,返回默认值')
# list1 = [1,4,7,8,9]
# for i in list1:
# print(i)
book = {'书名': '《三体》', '价格': 20, '作者': '刘慈欣'}
# 如果使用for..in直接遍历字典, 取出的是字典的key值
for i in book:
print(i)
'''
书名
价格
作者
'''
# 获取字典中所有值
book = {'书名': '《三体》', '价格': 20, '作者': '刘慈欣'}
print(book.values()) # dict_values(['《三体》', 20, '刘慈欣'])
print(list(book.values())) # ['《三体》', 20, '刘慈欣']
for v in book.values():
print(v)
print(book.keys()) # dict_keys(['书名', '价格', '作者'])
print(book.items())
for i in book.items(): # 拿到的是元组
print(i)
for k, v in book.items():
print(k, v)
for k, v in book.items():
print(k)
print(v)
# setdefault 只能添加,不能修改
book.setdefault('出版社', '人民教育出版社') # 类似: book[key]=value
print(book)
# {'书名': '《三体》', '价格': 20, '作者': '刘慈欣', '出版社': '人民教育出版社'}
book.setdefault('出版社', '人民出版社') # 类似: book[key]=value
print(book)
# {'书名': '《三体》', '价格': 20, '作者': '刘慈欣', '出版社': '人民教育出版社'}
dict1 = {'a': 10, 'b': 20}
book.update(dict1)
print(book)
# {'书名': '《三体》', '价格': 20, '作者': '刘慈欣', '出版社': '人民教育出版社', 'a': 10, 'b': 20}
# 两个字典之间不能用加号,update可以实现两个字典的合并
# print(dict1+book)
# TypeError: unsupported operand type(s) for +: 'dict' and 'dict'
print(book)
# fromkey 创建一个新的字典,用你给定的列表里面的key作为默认值
result = dict.fromkeys(['a', 'b']) # {'a': None, 'b': None}
print(result)
result = dict.fromkeys(['a', 'b'], 10) # {'a': 10, 'b': 10}
print(result)
result = dict.fromkeys(['a', 'b'], [1, 10]) # {'a': 10, 'b': 10}
print(result)
'''
books = [] 框 能放多本书
书:{}
书名 作者 价格
添加3本书:
1.添加书 不能添加同名书籍 [{'书名','aaa',...},{'书名','aaa',...}]
'''
P55-56 练习&练习讲解
# if value in 字典 是'不存在'的
dict1={'a':10,'b':20}
if 'a' in dict1:
print('在')
else:
print('不在')
if 10 in dict1:
print('在')
else:
print('不在')
m1, m2 = input('请输入:').split(' ')
print(m1, m2) # hello world
result = input('请输入:').split(' ')
print(result) # ['hello', 'world']
'''
books = [] 框 能放多本书
书:{}
书名 作者 价格
添加3本书:
1.添加书 不能添加同名书籍 [{'书名','aaa',...},{'书名','aaa',...}]
'''
books = []
while True:
if len(books) == 3:
break
name = input('输入书名:')
for book in books:
# if name in book.values(): # [{'a':10,'b':20},{'a':11,'b':10}] 这种情况也有bug,因为value包括了a,b后面的值
# print(type(book))
if name == book.get('name'):
print('重复书名,重新输入')
break
else:
author = input('作者')
price = float(input('价格'))
books.append({
'name':name,
'author':author,
'price':price
})
print(books)
P57 集合简介和集合内容添加
'''
集合:set
特点:没有重复,无序的
符号:{} {元素,元素,元素,..}---->集合
{} {key:value,...}---->字典
定义集合:
'''
# 当花括号里面不是键值对,那类型则为集合
set1 = {'张三'}
print(type(set1)) # <class 'set'>
#
list1 = [1, 3, 5, 6, 7, 8, 8, 3, 1]
set2 = set(list1)
print(set2) # {1, 3, 5, 6, 7, 8} 重复元素去除
set3 = {}
print(type(set3)) # <class 'dict'>
set4 = set() # 空集合set
print(type(set4)) # <class 'set'>
print(len(set4)) # 0
# 添加元素
set4.add('1')
print(set4)
set4.add('2')
print(set4)
set4.add('3')
print(set4)
# append extend --->list
# add update --->set
# list: 有序,允许重复
# set:无序,不允许重复
set1.update(set4)
print(set1)
print(set4)
set4.add('3') #如果出现重复元素,不允许添加--print出来无差别
print(set4)
P58 集合练习
'''
集合:set
特点:没有重复,无序的
符号:{} {元素,元素,元素,..}---->集合
{} {key:value,...}---->字典
定义集合:
'''
import random
# 当花括号里面不是键值对,那类型则为集合
set1 = {'张三'}
print(type(set1)) # <class 'set'>
#
list1 = [1, 3, 5, 6, 7, 8, 8, 3, 1]
set2 = set(list1)
print(set2) # {1, 3, 5, 6, 7, 8} 重复元素去除
set3 = {}
print(type(set3)) # <class 'dict'>
set4 = set() # 空集合set
print(type(set4)) # <class 'set'>
print(len(set4)) # 0
# 添加元素
set4.add('1')
print(set4)
set4.add('2')
print(set4)
set4.add('3')
print(set4)
# append extend --->list
# add update --->set
# list: 有序,允许重复
# set:无序,不允许重复
set1.update(set4)
print(set1)
print(set4)
set4.add('3') # 如果出现重复元素,不允许添加--print出来无差别
print(set4)
'''
产生5组(不允许重复),字母和数字组成4位验证码
最终打印此五组验证码
'''
# import random
#
# # 集合不重复
# code_set = set()
#
# s = 'qwertyuiopasdfghjklzxcvbbnm1234567890QWERTYUIOPASDFGHJKLZXCVBNM'
# while True:
# code = ''
# for i in range(4):
# r = random.choice(s)
# code += r
# # 将code添加到set中
# code_set.add(code)
# # 判断长度
# if len(code_set) == 5:
# break
#
# print(code_set)
import random
code_set=set()
s = 'qwertyuiopasdfghjklzxcvbbnm1234567890QWERTYUIOPASDFGHJKLZXCVBNM'
while True:
code1=''
# 生成4位由字母数字组成的验证码
for i in range(4):
# r = random.choice(s)
index = random.randint(0,len(s)-1)
code1+=s[index]
code_set.add(code1)
if len(code_set)==5:
break
print(code_set)
P59 总结讲过的类型
set1 = {'dn34', 'Ad0f', 'DFV3', 'FVlo', '23lS'}
set1.remove('DFV3')
print(set1) # {'dn34', '23lS', 'Ad0f', 'FVlo'}
# remove里的内容不存在,则报错
set1.discard('dfv4')
print(set1) # discard里面的内容不存在,不删除也报错
# del 实现删除
# del set1
# set1.clear()
# set1.add('adei')
# print(set1)
# 随机删除集合中的任意元素
set1.pop()
print(set1)
# 集合; 交集intersection 并集union 差集difference
set2 = {1,2,3,4,5}
set3 = {3,4,5,6,7,8,9}
# 了解
result = set2.intersection(set3) # & 交集
print(result)
result = set2.union(set3)
print(result)
result= set2.difference(set3) # | 并集
print(result) # {1, 2}
result = set3.difference(set2) # - 差集
print(result) # {8, 9, 6, 7}
# + - *
print(set2 & set3)
print(set2|set3)
print(set3-set2)
- list: 允许重复,有序 有下标 []
- tuple:允许重复,里面的元素不能增加删除修改,只能查看 ()
- dict:键值对存在 键:唯一 值:允许重复 ()
- set:不允许重复,无序 {}
类型转换:
list —> tuple,set(长度有可能发生改变)
tuple —> list,set
set —> list , tuple
dict —> list , tuple , set 但是只是将字典的键放到了[],(),{}
list -×-> dict 一般不能转,特殊情况可以转
list1 = [('a',10),('b',20),('c',30)]
print(dict(list1))
P60 综合练习
'''
图书管理系统
至少5本书
library = [{'bookname':'xxx','author':'xxx','price':1000},{},{}]
1.借书
2.还书
3.查询(书名/作者)
4.查看所有
5.退出
'''
import time
#
library = [
{'bookname': '西游记', 'author': '吴承恩', 'price': 100, 'number': 40},
{'bookname': '红楼梦', 'author': '曹雪芹', 'price': 300, 'number': 40},
{'bookname': '水浒传', 'author': '施耐庵', 'price': 200, 'number': 40},
{'bookname': '天珠变', 'author': '唐三少', 'price': 230, 'number': 0},
{'bookname': '西游记', 'author': '罗贯中', 'price': 310, 'number': 40}
]
# # 存储所有书名
# bookName_list=[]
# for book in library:
# name = book.get('bookname')
# bookName_list.append(name)
# print(bookName_list)
name_list = []
for book in library:
name = book.get('bookname')
name_list.append(name)
print(name_list)
author_list = []
for book in library:
author = book.get('author')
author_list.append(author)
print(author_list)
while True:
choice = int(input('\n1.借书 \n2.还书 \n3.查询 \n4.查看所有 \n5.退出\n'))
if choice == 1: # 选择借书功能
print('--借书--')
# 输入书名-->判断有无这本书-->存在多本/一本 注意number要改变
# 输入书名
flag = True
while flag:
book_list = [] # 用于存储所有要借的书籍名称
book_name = input('输入书名:') # 输入要借书籍名称
for book in library: # 遍历所有书籍,把所有满足该名称且有库存的书籍写入book_list
if book_name == book['bookname'] and book['number'] > 0:
book_list.append(book)
print(book_list)
if len(book_list) > 1: # 有重名,输入对应的作者
book_author = input('输入作者:')
for book in library:
if book_name == book['bookname'] and book_author == book['author']:
book['number'] -= 1
print('成功借阅%s的%s' % (book_author, book_name))
flag = False
break
else:
print('抱歉没有这本书')
lend_choice = input('选择退出借书(n)or重新输入(y)')
# 重新输入
if lend_choice == 'y':
continue
else:
print('正在退出系统')
time.sleep(2)
print('成功退出')
flag = False
break
elif len(book_list) == 1: # 唯一一本符合要求的书
for book in library:
if book_name == book['bookname']:
book['number'] -= 1
print('成功借阅%s' % book_name)
flag = False
elif choice == 2:
# print(my_book)
# 输入书名 输入作者
# 判断是否存在--》检查书名、作者 或 还书成功
print('--还书--')
flag = True
while flag:
bookname = input('请输入书名:')
author = input('请输入作者:')
for book in library:
if bookname == book['bookname'] and author == book['author']:
book['number'] += 1
print('还书成功')
flag = False
break
else:
print('输入的书名或作者错误,还书失败!请重新输入')
break
elif choice == 3:
print('查询')
# 1. 书名 ---> 根据书名查询
# 2. 作者----> 根据作者查询
# search = input('书名|作者') search ---> 比较2次
search = input('输入作者或书名')
if search in name_list:
print('书名'.center(10),'作者'.center(10),'库存'.center(10))
# 已知书名,要取出作者
for book in library:
if search==book['bookname']:
print(book['bookname'].center(10),book['author'].center(10),str(book['number']).center(10))
# 数字不能使用center--所以把数字改成字符类型
elif search in author_list:
print('书名'.center(10), '作者'.center(10), '库存'.center(10))
# 已知书名,要取出作者
for book in library:
if search == book['author']:
print(book['bookname'].center(10),book['author'].center(10),str(book['number']).center(10))
'''
if search in namelist:
pass
elif search in authorlist:
pass
'''
elif choice == 4:
print('查看所有')
print('书名'.center(10), '作者'.center(10), '库存'.center(10))
for book in library:
print(book['bookname'].center(10), book['author'].center(10), str(book['number']).center(10))
else:
print('--退出系统--')
flag = False
break