ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python编程学习-基础笔记03

2022-06-22 12:07:00  阅读:184  来源: 互联网

标签:03 Author Python bookname 编程 number print 借阅 图书


五、复习

5.1 图书管理系统

在这个章节里,所写的是基于线性脚本,纯代码堆砌,随着学习的深入,会在后面章节,通过模块化的方式来优化。

'''
图书管理系统:
    至少5本书
    library = [{'bookname':xxx,'Author':xxx,'price':xxx,'number':xx},{},{}]
要求:
1,借书
    不存在
    存在 -->
        判断数量:number 多本的情况
        可能不同作者: 根据作者选择要借的书
        借书成功后:修改库存数量
2,还书:
    输入书名和作者 -->判断是否存在 --> 检查书名和作者,还书成功,修改库存数量number
3,查询(可以根据书名或作者查询)
    1,输入1 或 2 来选择按书名或作者查询
    2,不区分:
        search = input('书名或作者'), 比较2次
        if search in namelist:
            pass
        elif search in authorlist:
            pass
4,查看所有
5,退出
    提示读者借到或归还的书数目!
'''
#定义一个数据库来存放图书
library = [
    {'bookname':'红楼梦','Author':'曹雪芹','price':88,'number':10},
    {'bookname':'废艺斋集稿','Author':'曹雪芹','price':28,'number':5},
    {'bookname':'世界是平的','Author':'托马斯·弗里德曼','price':28,'number':5},
    {'bookname':'三国演义','Author':'罗贯中','price':68,'number':10},
    {'bookname':'儒林外史','Author':'吴敬梓','price':38,'number':0},
    {'bookname':'西游记','Author':'吴承恩','price':68,'number':6},
    {'bookname':'西厢记','Author':'王实甫','price':38,'number':4},
    {'bookname':'百年孤独','Author':'加西亚·马尔克斯','price':48,'number':3},
    {'bookname':'简.爱','Author':'夏洛蒂·勃朗特','price':28,'number':3},
    {'bookname':'封神榜','Author':'许仲琳','price':58,'number':0},
    {'bookname':'Python入门到精通','Author':'Forrest','price':58,'number':3},
    {'bookname':'Python入门到精通','Author':'Jessica','price':38,'number':3},
    {'bookname':'Python入门到精通','Author':'Jim','price':38,'number':3},
    {'bookname':'水浒传','Author':'施耐庵','price':78,'number':5}
]
print('*************欢迎进入天大图书管理系统*************')
#获取书名并将将其放入一个列表
bookname_list = []
for i in library:
    bookname_list.append(i['bookname'])
#获取作者名并将将其放入一个列表
author_list = []
for i in library:
    author_list.append(i['Author'])
#容器接收本次借阅的图书
borrowed_booklist = []
#容器接收本次归还的图书
returned_booklist = []
#定义循环控制变量
flag = True
while flag:
    print('\n1,借书 \n2,还书 \n3,查询(可以根据书名或作者查询)\n4,查看所有书籍 \n5,退出')
    oper = input('请输入你要使用的功能编号:')
    #借书
    if oper == '1':
        #输入你要借阅的书名
        book = input('请输入你要借阅的书名:').strip()
        #判断图书是否存在系统,不存在即返回提示
        if book in bookname_list:
            #将检索到是书的数量累加给num
            num = 0
            #先定义个空的作者集合,添加书的作者,如果同一书名对应多位作者,这里可供选择
            author_sublist = []
            #定义一个新的图书列表
            sub_library = []
            #遍历图书列表,添加数量和作者到变量
            for i in library:
                #找到书名后,累加数量和作者
                if i['bookname'] == book:
                    #将搜索到的书添加到新的列表
                    sub_library.append(i)
                    #将作者名直接追加到列表
                    author_sublist.append(i['Author'])
                    #书的数量累加
                    num += i['number']
            #判断图书存在且数量大于0
            if num > 0:
                # 判断书名相同,但是作者不同
                if len(author_sublist) >= 2:
                    print('你打算借阅的图书有不同的作者,请选择你需要借阅的作者名:')
                    #列出不同的作者,供读者选择
                    for j in range(len(author_sublist)):
                        print(f'{j + 1}:{author_sublist[j]}')
                    # 读者选择作者,去掉空格
                    choice = input('请选择作者:').strip()
                    #选择之后回到数据库查询
                    for k in library:
                        #判断书名和作者名都满足要求
                        if k['bookname'] == book and k['Author'] == choice:
                            #读者选择是否借阅
                            select = input('请确认是否借阅:是Y/否N')
                            # 确认借书
                            if select.lower() == 'y':
                                #确认借阅,先减库存
                                k['number'] -= 1
                                #将借到的书放入借书车
                                borrowed_booklist.append(k)
                                #给读者返回提示信息和剩余库存量
                                print(f"你已成功借阅图书:<<{book}>>,作者:{k['Author']}")
                                print(f"该图书:<<{book}>>,作者:{k['Author']},还剩下库存量{k['number']}本")
                            # 放弃借书
                            elif select.lower() == 'n':
                                print('放弃借阅图书!')
                else:
                    print(f"你打算借阅的图书<<{book}>>作者是:{author_sublist[0]},请确认是否借阅!")
                    for k in library:
                        #判断是否存在多名作者
                        if k['bookname'] == book:
                            #读者选择是否借阅
                            select = input('请确认是否借阅:是Y/否N')
                            # 确认借书
                            if select.lower() == 'y':
                                #确认借阅,先减库存
                                k['number'] -= 1
                                #将借到的书放入借书车
                                borrowed_booklist.append(k)
                                #给读者返回提示信息和剩余库存量
                                print(f"你已成功借阅图书:<<{book}>>,作者:{k['Author']}")
                                print(f"该图书:<<{book}>>,作者:{k['Author']},还剩下库存量{k['number']}本")
                            # 放弃借书
                            elif select.lower() == 'n':
                                print('放弃借阅图书!')
            else:
                print(f'对不起,你要借阅的图书:<<{book}>>没有库存,请选择借阅其他图书!')

        else:
            print(f'对不起,检索不到你要借阅的图书:<<{book}>>,请重新输入!')
    #还书
    elif oper == '2':
        # 输入你要归还的书名和作者名
        book = input('请输入你要归还的书名:').strip()
        author = input('请输入你要归还的作者名:').strip()
        #判断图书是否存在系统,不存在即返回提示
        if (book in bookname_list) and (author in author_list):
            for k in library:
                if k['bookname'] == book and k['Author'] == author:
                    # 读者选择是否归还
                    select = input('请确认是否归还图书:是Y/否N')
                    # 确认归还
                    if select.lower() == 'y':
                        # 确认归还,加库存量
                        k['number'] += 1
                        # 将归还的书放入还书列表
                        returned_booklist.append(k)
                        # 给读者返回提示信息和剩余库存量
                        print(f"你已成功归还图书:<<{book}>>,作者:{k['Author']}")
                        print(f"该图书:<<{book}>>,作者:{k['Author']},当前库存量{k['number']}本")
                    # 放弃借书
                    elif select.lower() == 'n':
                        print('放弃归还图书!')

        else:
            #提示错误信息
            print(f"请检查你输入的书名:<<{book}>>或作者:{author}是否正确!!")
    #查询
    elif oper == '3':
        #输入查询内容
        search = input('请输入要查询的书名或作者:').strip()
        #判断如果读者输入的是书名
        if search in bookname_list:
            print('为你检索到如下信息:')
            #遍历数据库查找结果
            for k in library:
                if k['bookname'] == search:
                    #返回检索信息
                    print(f"书名:《{k['bookname']}》,作者:{k['Author']},价格:{k['price']},库存:{k['number']}本")
        # 判断如果读者输入的是作者名
        elif search in author_list:
            print('为你检索到如下信息:')
            #遍历数据库查找结果
            for k in library:
                if k['Author'] == search:
                    #返回检索信息
                    print(f"书名:《{k['bookname']}》,作者:{k['Author']},价格:{k['price']},库存:{k['number']}本")
        else:
            #提示错误信息
            print(f"未检索到你查询的内容,请检查你输入关键字'{search}'是否正确!!")
    #查看所有
    elif oper == '4':
        #提示信息
        print('当前数据库所有图书列表如下:')
        for k in library:
            print(f"书名:《{k['bookname']}》,作者:{k['Author']},价格:{k['price']},库存:{k['number']}本")
    elif oper == '5':
        # 读者确认是否退出系统
        select = input('请确认是否退出系统:是Y/否N\n')
        # 确认退出
        if select.lower() == 'y':
            #判断已借到书
            if len(borrowed_booklist) > 0:
                #提示读者本次借阅或归还的图书
                print(f"你本次共借阅{len(borrowed_booklist)}本图书!")
            elif len(returned_booklist) > 0:
                #提示读者本次借阅或归还的图书
                print(f"你本次共归还{len(returned_booklist)}本图书!")
            else:
                print('你本次没有借或还书的操作!')
            # 给读者提示信息
            print(f">>>>>>>>正在退出系统,欢迎再次光临>>>>>>>>")
            flag = False
        # 放弃退出
        elif select.lower() == 'n':
            print('请继续浏览!')
    else:
        #提示错误信息
        print('输入格式有误,请重新输入!')

5.2 列表推导

''''
列表推导式:最终得到一个列表
格式1:[i for i in 可迭代的]
格式2:[i for i in 可迭代的 if 条件]
格式3:[结果1 if 条件 esle 结果2 for i in 可迭代的 ]
'''
#得到一个列表
list1 =[]
for i in range(1,21):
    list1.append(i)
print(list1) #[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

#list2 == list1,先循环,再赋值给i,加到外层的列表
list2 = [i for i in range(1,21)]
print(list2)

list2 = [i+2 for i in range(1,10)]
print(list2) #[3, 4, 5, 6, 7, 8, 9, 10, 11]

#格式2:[i for i in 可迭代的 if 条件]
list2 = [i for i in range(1,21) if i%2 == 0]
print(list2) #[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

#提取
list3 = ['hello','55','world','88','beauty','love']
#取出里面的单词
list4 = [word for word in list3 if word.isalpha()]
print(list4) #['hello', 'world', 'beauty', 'love']

list4 = [word.title() if word.startswith('h') else word.upper() for word in list3 ]
print(list4) #['Hello', '55', 'WORLD', '88', 'BEAUTY', 'LOVE']

#1-20,按3位截取
a = [x for x in range(1,21)]
b = [a[i:i+3] for i in range(0,len(a),3)]
print(b) #[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15], [16, 17, 18], [19, 20]]

标签:03,Author,Python,bookname,编程,number,print,借阅,图书
来源: https://www.cnblogs.com/orange2016/p/16399999.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有