在这个章节里,所写的是基于线性脚本,纯代码堆砌,随着学习的深入,会在后面章节,通过模块化的方式来优化。
''' 图书管理系统: 至少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('输入格式有误,请重新输入!')
'''' 列表推导式:最终得到一个列表 格式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]]