python P51-60

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值