37.新学期到了,学校接收了一批捐赠的图书,小明编写了一个简单的程序用来管理图书,并支持借阅功能。为了提高查找图书的效率,小明使用了二分查找法来设计图书借阅功能。以下是小明编写的图书借阅管理程序,请你补全代码。 library=dict() #用字典生成一个图书管理数据结构(字典的键为编号,字典的值为['书名',本数]) #书籍入库 nums=len(library) #先计算图书编号总数 library[nums+1]=['红楼梦',5] #在编号总数的基础上继续添加新书:library[新编号]=['书名',本数] library[nums+2]=['西游记',10] library[nums+3]=['水浒传',5] library[nums+4]=['三国演义',10] print(library) blist=list(library.keys()) #按书名借阅: bookname=input('请输入借阅图书名称:') min_v = blist[0] max_v = blist[-1] turns=0 while min_v <= ① : turns += 1 cur = (min_v + max_v) ② print(cur) if library[cur][0] == ③ : if library[cur][1] > 0: library[cur][1] -= ④ print('《%s》借阅成功!'%bookname) else: print('抱歉,您选择的书籍已被借完!') break elif blist[cur-1] > cur: min_v = ⑤ else: max_v = ⑥ print("经过%d轮二分查找,完成图书的搜索。"%turns)
【喵呜刷题小喵解析】:首先,我们分析题目中给出的代码。小明使用了一个字典来存储图书信息,字典的键是图书的编号,值是图书的名称和数量。他希望通过二分查找法来快速找到用户想要借阅的图书。在二分查找法中,我们需要维护一个有序序列,并在每次查找时通过比较中间元素来缩小查找范围。在这个程序中,小明使用了一个列表来存储图书的编号,并通过比较中间编号来查找用户想要借阅的图书。接下来,我们分析代码中的空格部分:① max_v:我们需要比较中间编号是否小于等于最大编号,如果小于等于,则继续查找,否则结束查找。② //2:我们需要计算中间编号,使用整除运算符 // 来确保结果是整数。③ bookname:我们需要比较中间编号对应的图书名称是否等于用户想要借阅的图书名称。④ 1:如果中间编号对应的图书数量大于0,则借阅成功,并将图书数量减1。⑤ cur+1:如果中间编号对应的图书名称不等于用户想要借阅的图书名称,且前一个编号大于中间编号,则更新最小编号为中间编号加1。⑥ max_v-1:如果中间编号对应的图书名称不等于用户想要借阅的图书名称,且后一个编号小于中间编号,则更新最大编号为中间编号减1。最后,我们输出经过多少轮二分查找完成图书的搜索。因此,根据以上分析,我们可以得出答案。